接下来,我们继续来学习,指向指针的指针,这粗略地看起来有点绕,其实理清逻辑也是很容易的,因为是指向指针的指针,所以我们在定义时,要用到两个“*”(星号),具体操作代码如下:
#include<stdio.h> int main(void) { int a=23,*z,**s; z=&a; *z=223; s=&z; printf(" a=%d &a=%d \n *z=%d z=%d &z=%d \n **s=%d *s=%d s=%d &s=%d \n",a,&a,*z,z,&z,**s,*s,s,&s); **s=204; printf("\n a=%d &a=%d \n *z=%d z=%d &z=%d \n **s=%d *s=%d s=%d &s=%d \n",a,&a,*z,z,&z,**s,*s,s,&s); }
代码调试截图如下:
根据上方代码和下方调试截图,我们进行一些分析,
1.“a”是一个普通(整数类型)变量“z”是一个(整数类型的)指针,“s”是一个指向(整数类型的)指针的(整数类型的)指针
2.通过 z=&a,令变量a的地址赋值给指针z,(说明 现在 z这个内存区域里面存放的是变量a的地址)
3.*z=223;,利用指向变量a的指针z进行数据修改,将223赋值给内存地址为z的内存中
4.再通过 s=&z,令指针z的地址赋值给指针 s (说明 s这个内存区域里面存放的是指针z的地址)
5.分别输出,变量a的数据,变量a的内存地址,访问内存地址为z中的数据,a的内存地址,本指针所占的内存地址,**s意思是 访问内存地址为*s中的数据,*s意思是 访问内存地址为s中的数据,s意思是 指针z所占的内存地址,&s本指针所占的内存地址
6.将204赋值到内存地址为 *s(而*s意思是 访问内存地址为s中的数据)—–总的来说,就是间接的访问内存地址为 s或z或&a
7.经过**s=204;,之后再次输出
评论2