指针存储的是内存地址,那么当代码执行
int *iptr; int a; iptr = &a;
它表示iptr指向了a所在的内存地址。那么若执行
*iptr = 10; printf("a = %d\n",a);
那么a的值为多少呢?
可以简单地写一个程序 cpoint1.c
#include<stdio.h> int main() { int a; int *iptr; iptr = &a; *iptr = 10; printf("a = %d\n",a); }
在终端上利用gcc编译
#gcc cpoint1.c
执行后生成a.out执行文件
./a.out
会看到打印的是 a = 10
这里可理解为指针iptr指向了a所在的内存地址,那么当执行
*iptr = 10;
时,实际就是将10存到a所在的内存地址中。
现在了解了指针的基本概念,那么什么是指针的指针呢?
首先,假设小明、小华、小新他们三个是朋友,但是小明只有小华的电话号码,而小华只有小新的电话号码。那么如果小明想找小新的话,就得先联系小华,通过小华联系小新。
如果将小华和小新都当做一个内存的地址,那么小明指向小华,可理解为一级指针,小华再指向小新,这样就成了指针的指针。
int *iptr; int a; int **jptr;
上面已经知道了
iptr = &a;
指的是将a所在的内存地址赋值给iptr
那么jptr这个指针又该如何赋值。刚才小明小华小新的例子,可以这样解剖
int **小明; int *小华; int 小新;
首先小明要得到小新的地址,那么要通过小华。所以有
小华 = &小新;
这样小华就指向了小新,得到小新的地址,然后再将小华的地址转给小明,这样就可以完成小明得到小新的地址
小明 = &小华;
接下来看下面的程序 cpoint2.c
#include<stdio.h> int main() { int a; int *iptr; int **jptr; iptr = &a; jptr = &iptr; a = 10; printf("jptr = %d\n",**jptr); }
#gcc cpoint2.c
编译执行的结果为:
jptr = 10
看明白了吗?
C中的指针的指针
时间: 2024-10-27 12:40:53