C语言程序设计 指针变量的定义

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)所示。

交换地址和交换指针所指向变量的值是有本质区别的。

相关文档
最新文档