【C语言】对指针的深入理解

声明时int *a;表示*a产生的结果的数据类型是int类型,*运算符的作用是返回指定地址的变量的值,a是一个指向int的指针。
声明时int* a,b,c; 等价于int *a; int b,c; 正确写法是int *a,*b,*c;
初始化时char *a="hello"; 相当于char *a; a="hello"; 即初始值是赋给a本身的。

声明时int a; int *b=&a; int **c=&b; c是指针的指针。
*&a=1;等价于a=1;

b=*p++;等价于b=*p; p++;
b=++*p;等价于b=++(*p);(这两个操作符的结合性都是从右向左)
b=*++p;等价于p++; b=*p;
b=++*++p;等价于b=++(*++p);
b=++*p++;等价于b=++(*p); p++;
(*a).b等价于a->b

遍历数组:int a[n]; for(int *p=&a[0];p<&a[n];p++) *p=1;(&a[n]表示最后一个元素后面的内存位置,用指针获取这个位置是合法的,但不能对其进行间接访问)(标准允许指向数组元素的指针与最后一个元素后面的内存位置进行大小比较,但通常不允许指向数组元素的指针与第一个元素前面的内存位置进行大小比较)

如果要实现一个交换两个数的值的函数,无法直接通过传变量的形参实现,需要借助两数的指针。如果要实现一个交换两个指针指向的地址的函数,也无法直接通过传指针变量的形参实现,需要借助指针的指针。

指针也可以通过下标访问数组元素:

指针在二维数组中的应用:

Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments