-
指针的定义
变量的指针,其含义是指该变量的地址 -
指针和指针变量
指针是一个地址,指针变量是存放地址的变量 -
两个运算符
*是指针运算符,也叫"间接访问"运算符,*p代表指针变量p指向的对象。&是取地址运算符,&a是变量a的地址。
-
例题:int *point,a=4; point=&a;
下面均代表地址的一项是()
A. point, *&a
B. &*a,&a,*point
C. *&point,&*point,&a
D. &a,&*point,point
首先我们可以判断,point这个指针变量存放了a的地址,那么 point 和 &a 就是代表地址
其次,我们知道 * 是取指的符号,那么意思就是 *point=a=4; 那么我们就大致可以开始判断。
A选项 point 代表地址, *&a 的意思是 取a地址中的值 那么A选项排除
B选项 &*a 该表达式错误,原因是未定义指针变量a ,&a正确, *point=4错误
C选项 *&point表达式错误,因为point就代表地址,加&错误;&a正确, *point=4错误
D选项 需要讲解的就是 &*point,首先要清楚 运算符优先级,*是大于&的,所以先
取值 就是取a的值,然后再取a的地址。所以 答案选 D -
通过指针引用数组
注意引用数组的时候 int *p,a[10]
p=a和p=&a[0]等价
意思就是数组名不代表整个数组,而是把首元素的地址赋给指针变量p -
引用数组元素时指针的运算,看 例题:
#include<stdio.h>
int main()
{
int x[] = {10,20,30};
int *px = x;
printf("%d,",++*px);
printf("%d,",*px);
px=x;
printf("%d,",(*px)++);
printf("%d,",*px);
px=x;
printf("%d,",*px++);
printf("%d,",*px);
px=x;
printf("%d,",*++px);
printf("%d,",*px);
return 0;
}
输出结果:
其中 *px++ 和 *++px都是数组下标加1的意思
那么 ++*px 和 (*px)++ 就是值的自增了。
这个帖子大多都是很基础的东西,但是用起来的时候 总是需要基础作为支撑。因此比较繁琐,也希望自己能够记得牢固,