第6章指针 本章要点 6.1地址和指针的概念 62指向变量的指针变量 63指针与数组 64指针与字符电
第6章 指针 本章要点 6.1 地址和指针的概念 6.2 指向变量的指针变量 6.3 指针与数组 6.4 指针与字符串
本章要点 ◆理解地址和指针的概念,及指针变量的初始化方法 掌握指针变量的引用方法和格式,特别注意本文对 在引用指针变量时所强调的内容 ☆熟念掌握指针变量的运算规则
本章要点: ❖ 理解地址和指针的概念,及指针变量的初始化方法; ❖ 掌握指针变量的引用方法和格式,特别注意本文对 在引用指针变量时所强调的内容; ❖ 熟念掌握指针变量的运算规则
61地址和指针的概念 地址和指针的定义 指针有以下四方面的重要作用 (1)指针为函数提供修改变量值的手段。 (2指针为C的动态内存分配系统提供支持。 (3)指针为动态数据结构(如链表、队列、二叉树 等)提供支持。 4指针可以改善某些子程序的效率
6.1 地址和指针的概念 ❖ 地址和指针的定义 ❖ 指针有以下四方面的重要作用: (1)指针为函数提供修改变量值的手段。 (2)指针为C的动态内存分配系统提供支持。 (3)指针为动态数据结构(如链表、队列、二叉树 等)提供支持。 (4)指针可以改善某些子程序的效率
62指向变量的指针变量 令如上一节所述,指向变量的指针与指针变量是不同的概念, 指向变量的指针等价于变量的地址,而指针变量是存放变量 地址的变量。下面详细介绍指向变量的指针变量,即存放变 量地址的指针变量。 6.2.1指针变量的定义 指针变量的定义形式为: 令[存储类型]数据类型*指针变量名[=初始值 令说明: 冷(1)存储类型是指指针变量本身的存储类型,与前面介绍过的 相同,可分为 register型、 static型、 extern型和auto型,若 缺省则为auto型。 冷(2)数据类型是指该指针可以指向该数据类型的变量。 冷(3)*号表示后面的变量是指针变量。 冷(4)初始值通常为某个变量名或为NULL,不要将内存中的某 个地址值作为初始地址值
6.2指向变量的指针变量 ❖ 如上一节所述,指向变量的指针与指针变量是不同的概念, 指向变量的指针等价于变量的地址,而指针变量是存放变量 地址的变量。下面详细介绍指向变量的指针变量,即存放变 量地址的指针变量。 ❖ 6.2.1指针变量的定义 ❖ 指针变量的定义形式为: ❖ [存储类型]数据类型*指针变量名[=初始值]; ❖ 说明: ❖ (1)存储类型是指指针变量本身的存储类型,与前面介绍过的 相同,可分为register型、static型、extern型和auto型,若 缺省则为auto型。 ❖ (2)数据类型是指该指针可以指向该数据类型的变量。 ❖ (3)*号表示后面的变量是指针变量。 ❖ (4)初始值通常为某个变量名或为NULL,不要将内存中的某 个地址值作为初始地址值
62.2指针变量的引用 令变量名其实是给变量数据存储区域所取的名字。计算机内存 的每个存储位置都对应惟一的存储地址。在前几章的叙述中 都是通过变量名访问变量。C语言支持使用变量存储地址对 变量进行存取操作。 引用指针变量时必须注意以下几点 (1)未经赋值的指针变量不能使用; 令(2)指针变量的赋值只能赋予地址
6.2.2指针变量的引用 ❖ 变量名其实是给变量数据存储区域所取的名字。计算机内存 的每个存储位置都对应惟一的存储地址。在前几章的叙述中, 都是通过变量名访问变量。C语言支持使用变量存储地址对 变量进行存取操作。 ❖ 引用指针变量时必须注意以下几点: ❖ (1)未经赋值的指针变量不能使用; ❖ (2)指针变量的赋值只能赋予地址
下面介绍两个和指针有关的运算符 冷(1)&取地址运算符 令C语言中提供了取地址运算符&,它是一个单目运算符,结 合性自右向左,它的功能是取变量的地址。其一般形式为: &变量名; 例如,&a表示变量a的地址,&b表示变量b的地址。变量本 身必须预先说明 令注意:&在形式上虽然与位操作中的“按位与”运算符完全 相同,但“按位与”运算符是双目运算符,而此处的取地址 运算符为单目运算符,二者在使用上不会发生混淆 下面是一个使用“&”运算符的例子
下面介绍两个和指针有关的运算符。 ❖ (1)&取地址运算符 ❖ C语言中提供了取地址运算符&,它是一个单目运算符,结 合性自右向左,它的功能是取变量的地址。其一般形式为: ❖ &变量名; ❖ 例如,&a表示变量a的地址,&b表示变量b的地址。变量本 身必须预先说明。 ❖ 注意:&在形式上虽然与位操作中的“按位与”运算符完全 相同,但“按位与”运算符是双目运算符,而此处的取地址 运算符为单目运算符,二者在使用上不会发生混淆。 ❖ 下面是一个使用“&”运算符的例子
用“&”运算符查看变量和数组地址示例 iNclude void maino int a=2: float b=3: double c=3 char d5: printf("address of a is:%pn",&a);/输出变量a的地址* printf("address of b is:%pn",&b);/输出变量b的地址* printf("address of c is:%pn",&c);/*输出变量c的地址 printf("address of array d is:%pn;o);/输出数组d的首地 址*
用“&”运算符查看变量和数组地址示例 #include void main() { int a=2;float b=3;double c=3; char d[5]; printf("address of a is:%p\n",&a); /*输出变量a的地址*/ printf("address of b is:%p\n",&b); /*输出变量b的地址*/ printf("address of c is:%p\n",&c); /*输出变量c的地址*/ printf("address of array d is:%p\n",d); /*输出数组d的首地 址*/ }
运行结果为: C: \"E: \C\ test\ Debug test.exe address of a is: 0012FF7C address of b is: 0012FF78 address of c is: 0012FF70 address of array d is: 0012FF68 Press any key to continue
运行结果为:
(2)指针运算符 指针运算符“*”是单目运算符,其结合性为自右至 左,用来表示指针变量所指的变量。在“*″运算符 之后的变量必须是指针变量。 变量与指针的存储关系 3000 3000 3002 3001 -3002 3003 3004 12.34 X 3005 3006 3007
(2)*指针运算符 ❖ 指针运算符“*”是单目运算符,其结合性为自右至 左,用来表示指针变量所指的变量。在“*”运算符 之后的变量必须是指针变量。 ❖ 变量与指针的存储关系
引用指针变量示例 include void maino nta=50,*p;/声明整型指针变量p* p=&a; printi(po=%dn",*p);/输岀指针变量p所指向变量 的值* p=100 printf( a=%dn", a)
引用指针变量示例。 #include void main() { int a=50,*p; /*声明整型指针变量p*/ p=&a; printf("*p=%d\n",*p); /*输出指针变量p所指向变量 的值*/ *p=100; printf("a=%d\n",a); }