指针变量通过“类型名 * 指针变量名;”定义,而且当指针变量指向一个存储单元时,可以用“* 指针变量名”引用该存储单元的内容。在C语言中这两处的“*”含义不同,前者不是运算符,贰拾定义指针变量时用的说明符,后者是间接运算符。“&”也是运算符,是取地址符。
间接运算符“*”、自加运算符“++”、“()”运算符这些运算符和指针一起用是需要注意运算符的优先级。
例
#include<stdio.h>
main{
int a[5] = {0,10,20,30,40},*p = a;
printf("%d\n",*p); //相当于输出a[0]的值,输出结果是0
printf("%d\n",*p++); //++的优先级比*的优先级高,所以先进行p++,因为++在指针变量p的后面,所以该表达式先去a[0]的值,然后指针p指向a[1]的地址。所以输出0
printf("%d\n",(*p)++);//*p=a[1]=10;(*p)++等价于a[1]++;因为++在a[0]的后面所以输出结果是10,但是a[1]的值变成了11。输出10
printf("%d\n,*(++p)");//指针p原来指向a[1]的地址,++在指针p的前面,所以*(p++)=a[2];且指针指向a[2]的地址。输出20
printf("%d\n,++(*p)");//指针现在指向a[2]的地址,即*p=20;++(*p)的值就是21。输出21
} |
|