同样是将数组首地址存入指针变量里面,为什么有时加*有时不加*呢?

同样是将数组首地址存入指针变量里面,为什么有时加*有时不加*呢?,第1张

同样是将数组地址存入指针变量里面,为什么有时加*有时不加*呢?

笔者为纯初学者,在通过小甲鱼的c语言教程进行自学时,学到了指针数组与数组指针这一章,果不其然,指针的学习难度很大,笔者对于很多习题都是处于完全不会做的情况。在论坛上搜寻相关资料时,偶然遇见一个坛友提出一个很有趣的问题,对此,笔者也同样有疑问,故以实验寻求其答案,提出不成熟之猜想,望与诸君共勉。

 

 

由图可知,target,*target,以及一维数组str的第一个元素实则拥有同一个地址,故不难发现,数组指针实则指向了数组的第一个元素的地址。

在百度百科上同样指出a[0]是第一个一维数组的数组名与首地址,而*a与a[0]等效,都表示0号元素的首地址,故a,*a与&a[0]等效。若a是二维数组名,则a作常指针使用时,a是第0行的指针,*a是第0行的第一个元素的指针(二者值同,意义不同),即在C语言的使用中,a是二维数组的首地址。*a也就是a[0],是二维数组第一行的首地址,因此二者只是值恰好相等,但a等同于多维指针,而*a等同于一维指针。

 

当我们试图打印其值时,程序报错,显示target与*target都不是int格式,其中target为int(*)[5]格式,*target为int*格式,即target为数组指针,表示的是数组的首个指针,*target为普通指针,表示的是第一行的第一个指针。因此不难解释谈友的疑问,为什么取得*(*p2+i)要多加一个*,而*(P+1)的P不用加*。*p2是一个地址,(*p2+i)是一个地址,想要打印他的值,自然需要再加一个取值符号,而*(P+1)的P直接指向了地址,所以不用加再在P前加*了。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4750733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-09
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存