C语言程序设计 指针变量的定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1.3指针变量的定义
前面提到的存放地址的变量是一种特殊的变量,它只能用来存放地址而不能用来存放其他类型(例如整型、实型、字符型等)的数据,需专门定义。“指针”表示指向关系,所谓指针就是地址。一个变量的指针就是这个变量的地址,存放地址的变量称为指针变量。例如:pa 是一个指针变量,pa 中存放的是整型变量a 的地址,也就是说pa 指向变量a。变量a 的地址就是变量a 的指针,一个指针变量的内容一定是另一个变量在内存中的地址。
定义形式为:
数据类型说明符
*标识符;
例如:
int
*p;
表示定义了一个指针变量p,它指向一个整型变量,即p 存放一个整型变量的地址。
说明:
(1)“数据类型说明符”是指该指针变量所指向变量的类型;(2)“标识符”就是所定义的指针变量的名字;
(3)定义一个指针变量必须用符号“*”,它表明其后的变量是指针变量,但不要认为“*p”是指针变量,指针变量是p 而不是*p;
(4)指针可以指向任何类型的对象。
在定义了一个指针变量p 以后,系统为这个指针变量分配一个存储单元(一般为2个字节),用来存放地址。要使一个指针变量指向某个变量,必须将该变量的地址赋给该指针变量。
例如:
int a,b;int
*p1,*p2;
p1=&a;p2=&b;
上述语句表示定义了两个整型变量a,b 和两个指针变量p1,p2,然后将a 的地址赋给p1,b 的地址赋给p2,这样p1指向变量a,
p2指向变量b。
6.1.4指针变量的引用
定义了一个指针变量后,可以对该指针变量进行各种操作,操作时用到两个有关指针的运算符:
(1)&:取地址运算符。(2)*:指向运算符。
例如:&a 为变量a 的地址,*p 为指针变量p 所指向的变量。【例6-1】定义指向整型变量的指针
/*程序名:6_1.c*/#include
&a
&b
p1
a p2b
图6-3指针的指向
int main()
{
int a,b,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;/*p1指向a*/
p2=&b;/*p2指向b*/
printf("%d%d\n",*p1,*p2);
printf("%d%d\n",a,b);
return0;
}
程序运行如下:
3,6
36
36
可以看出,printf(“%d,%d\n”,*p1,*p2)和printf(“%d,%d\n”,a,b)两个语句作用相同。*p1表示p1所指向的变量a,*p2表示p2所指向的变量b。
【例6-2】交换指针的指向
/*程序名:6_2.c*/
#include
int main()
{
int a=5,b=8;
int*p1,*p2,*p;
p1=&a;
p2=&b;
printf("%d%d\n",*p1,*p2);
p=p1;p1=p2;p2=p;
printf("%d%d\n",*p1,*p2);
printf("%d%d\n",a,b);
return0;
}
程序运行结果如下:
58
85
58
程序执行过程可由图6-4所示:
p1a p2b &a5
&b8
(a)p1a p2b &b5
&a8
(b)
图6-4程序执行过程示意图
第一个printf语句执行时,p1和p2的指向如图6-4(a)所示,p1指向a,p2指向b;*p1就是a,*p2就是b。在将p1和p2互换后的情况如图6-4(b)所示。这时,p1指向b,p2指向a;*p1就是b,而不再是a;*p2就是a。所以第二个printf语句执行后,输出结果为8,5。程序中的指针变量p的作用是作为交换p1和p2的值所需要的临时变量,p也应定义为指针变量。第三个printf语句执行后,分别输出a,b的值,从结果可以看出a,b 变量的值没有发生变化,和初始值一致。
【例6-3】交换指针所指向的变量值。
/*程序名:6_3.c*/
#include
int main()
{
int a,b,temp;
int*p1,*p2;
a=5;b=8;
p1=&a;
p2=&b;
printf("%d%d\n",a,b);
temp=*p1;*p1=*p2;*p2=temp;
printf("%d%d\n",a,b);
return0;
}
程序运行结果如下:
58
85
程序执行过程可由图6-5所示
p1a p2b &a5
&b8
(a)p1a p2b &b8
&a5
(b)
图6-5程序执行过程示意图
p1和p2一直指向a和b,所以第一次调用printf()函数时,输出a和b的值,三个赋值语句执行以后,将a,b的值互换,如图6-5(b)所示。
交换地址和交换指针所指向变量的值是有本质区别的。