指针变量

指针变量

指针变量就是地址变量。换句话说,指针变量所存放的地址是可以改变的。在程序中,每一个变量都有一个地址。这些地址都可以存放在指针变量中。

为了表示指针变量和它所指向的变量之间的关系,在程序中用 *符号表示“指向”。

  • i_pointer 是指针变量
  • &i_pointer所存储的内容是变量的地址
  • *i_pointer是i_pointer所指向的变量存储的内容,也就是变量i的内容。

因此,下面两个语句作用相同:
i=3;
*i_pointer=3;

第2个语句的含义是将3赋给指针变量i_pointer所指向的变量。

定义指针变量

定义指针变量的一般形式为:
类型说明符 *变量名;
其中,*表示这是一个指针变量,类型说明符表示该指针变量所指向的变量的数据类型。例如:
int* p1;
以上程序中,p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由p1所赋予的地址来决定。再如:
int* p2; //p2是指向整型变量的指针变量
float* p3; //p3是指向浮点变量的指针变量
char* p4; //p4是指向字符变量的指针变量

注意:一个指针变量只能指向同类型的变量,如 p3 只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量

指针变量的引用

指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值(初始化)。未初始化的指针变量值没有意义,不能使用。 指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。在C语言中,变量的地址是由编译器分配的,对用户完全透明,用户不能控制变量的具体地址。

指针运算符:

& 取地址运算符: 它返回其操作数(即一个变量)在内存中的实际地址
* 指针运算符: 它返回其操作数(即一个指针)所指向的对象的值。

C语言中提供了地址运算符&来获取变量的地址。其一般形式为:

&变量名;
假设有整数型变量a,那么&a表示变量a的地址。再假设我们还有一个指向整型变量的指针变量p,如要把变量a的地址赋予指针变量p可以用以下方式。
int a; //建立整数型变量a
int* p; //建立整数指针变量p
p=&a; //将变量a的地址赋予指针变量p

完整举例请见以下程序(无法复制本站示例代码?)

常见错误

把一个数字直接赋予指针变量是错误的,故下面的赋值是错误的:

int *p;
p=1000; //不能将数值直接赋给指针变量