C语言指针的学习要点

  1. 指针的定义
    变量的指针,其含义是指该变量的地址

  2. 指针和指针变量
    指针是一个地址,指针变量是存放地址的变量

  3. 两个运算符
    *是指针运算符,也叫"间接访问"运算符,*p代表指针变量p指向的对象。

    &是取地址运算符,&a是变量a的地址。

  4. 例题: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

  5. 通过指针引用数组
    注意引用数组的时候 int *p,a[10]
    p=a和p=&a[0]等价
    意思就是数组名不代表整个数组,而是把首元素的地址赋给指针变量p

  6. 引用数组元素时指针的运算,看 例题:

#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)++ 就是值的自增了。

这个帖子大多都是很基础的东西,但是用起来的时候 总是需要基础作为支撑。因此比较繁琐,也希望自己能够记得牢固,

猜你喜欢

转载自blog.csdn.net/qq_43583169/article/details/84712693