图解C语言指针变量,清晰易懂|世界报资讯

  • 来源:面包芯语
  • 2023-05-04 09:28:40
分享到:
  • 收藏

扫描关注一起学嵌入式,一起学习,一起成长

以下图示a表示计算机内存,b表示一个函数调用时在栈(stack)上开辟的栈帧空间:

2 指针变量与数组名

数组名在一定的上下文中会转换为指向数组首元素的地址,以方便指针的算术运算,如


【资料图】

#includeintmain(){inta[5]={0};charb[20]={0};*(a+3)=10;//a+3是指相对于地址a,偏移sizeof(int)个字节*(b+3)="x";//b+3是指相对于地址b,偏移sizeof(char)个字节printf("%d,%c\n",a[3],b[3]);//10,xwhile(1);return0;}

可以图示一下以上代码指针的偏移细节:

3 主调函数与被调函数之间的指针传递

#includevoidswap1(intx,inty){inttmp;tmp=x;x=y;y=tmp;}voidswap2(int*x,int*y){inttmp;tmp=*x;*x=*y;*y=tmp;}voidcaller(){inta=10;intb=20;swap1(a,b);printf("%d%d\n",a,b);swap2(&a,&b);printf("%d%d\n",a,b);}intmain(){caller();return0;}

以上代码可用以下图示理解:swap1传值:

swap2传址(指针传递):

4 数组做函数参数

二维数组是数组的数组,n维数组是n-1维数组的数组。内存是一维的字节序列,所谓的n维数组其实只是一个逻辑意义的表示,其物理结构还是一维线性的。

n维数组的元素是一个n-1维数组。如果用指针指向一个n维数组,其指针类型必须有n-1维的长度信息,当其用作函数参数时也是如此。

voidg(inta[][2]){//voidg(int(*a)[2]){是相同写法a[2][0]=5;}voidcaller(){inta[3][2];int(*p)[2]=a;*(*(p+2)+0)=7;//p=2表示相对于地址p偏移sizeof(*p)printf("%d\n",a[2][0]);//7g(a);printf("%d\n",a[2][0]);//5}

以下代码可以用以下图示辅助理解:

ref:Kyle Loudon《 Mastering Algorithms with C》

C 语言中的三块技术难点

C语言进阶之 回调函数详解

详解 C 语言指针,一文给他搞定

个人微信开放,扫码添加,进高质量嵌入式交流群

觉得文章不错,点击“分享”、“赞”、“在看” 呗!

标签:

分享到:


精彩推送

精彩要闻

新英超女神_新英体育
资讯 2023/05/02
匠心 每日关注
资讯 2023/05/01