在C语言中,还可以定义一种特殊的变量,这种变量只是用来存放内存地址的。如图8-2所示,假设我们定义了一个这样的变量p,它也有自己的地址(2002)。若将变量a的内存地址(1012)存放到变量p中,这时要访问变量a所代表的存储单元,可以先找到变量p的地址(2002),从中取出a的地址(1012),然后再去访问以1012为首地址的存储单元。这种通过变量p间接得到变量a的地址,然后再存取变量a的值的方式称为“间接存取”方式。这种用来存放地址的变量称为“指针变量”,上述变量p就是指针变量。
图8-2 存放地址的指针变量示意图
1.指针变量的一般定义形式
类型名*指针变量名1,*指针变量名2,……;
例如:
int*pi,*pj;
说明:
(1)pi和pj是用户标识符,每个变量前面的星号“*”是一个用来说明该变量是指针变量的说明符。
(2)在以上定义语句中,pi和pj是两个指向整型(int类型)变量的指针,也就是说变量pi和pj中只能存放int类型变量的地址,这时我们称int是指针变量pi和pj的基类型。
(3)变量值(指针)所指向的变量的数据类型,称为“基类型”。
2.对指针变量的操作
像一般变量一样,指针变量也可以通过指针运算符进行相应的运算。指针运算符主要有两种:取地址运算符“&”和取内容运算符“*”。
(1)取地址运算符“&”使用的格式:(www.xing528.com)
&<变量名>
取地址运算符“&”是单目运算符,其结合性为自右至左。其功能是取变量的地址,即返回操作对象的内存地址。“&”只能用于一个具体的变量或者数组元素,而不能是表达式或者常量。
例如,假定有以下定义语句:
int*p,i=10,j;
p=&i;
(2)取内容运算符“*”使用的格式:
*<指针变量名>
取内容运算符“*”是单目运算符,其结合性为自右至左。其功能是表示指针变量所指的变量。在“*”运算符之后的变量必须是指针变量。
例如:根据(1)的例子,有语句j=*p。
以上赋值语句是把p所指存储单元(i)的内容(整数10)赋予变量j,这里*p代表p所指的变量i。“j=*p;”等价于“j=i;”。
语句j=*(&i);
表达式&i求出变量i的地址,以上赋值语句表示取地址&i中的内容赋予j。由于运算符“*”和“&”的优先级相同,且自右向左结合,所以表达式中的括号可以省略,即可写成:j=*&i;。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。