数组到指针衰减并将多维数组传递给函数

数组到指针衰减并将多维数组传递给函数,第1张

概述我知道一个数组衰减到一个指针,如果一个声明 char things[8]; 然后在以后的东西在别的地方,事情是指向数组中第一个元素的指针. 另外,从我的理解,如果一个声明 char moreThings[8][8]; 那么moreThings不是指向char的类型指针,而是类型“指向char的指针数组”,因为衰减只发生一次. 当更多的东西被传递给一个函数(使用原型void doThings(cha 我知道一个数组衰减到一个指针,如果一个声明
char things[8];

然后在以后的东西在别的地方,事情是指向数组中第一个元素的指针.

另外,从我的理解,如果一个声明

char moreThings[8][8];

那么moreThings不是指向char的类型指针,而是类型“指向char的指针数组”,因为衰减只发生一次.

当更多的东西被传递给一个函数(使用原型voID doThings(char thingsGoHere [8] [8]))堆栈中实际发生了什么?

如果moreThings不是指针类型,那么这真的还是一个pass-by-reference吗?我想我一直认为moreThings仍然代表多维数组的基地址.如果doThings采取了输入的东西,如果它本身将它传递给另一个函数呢?

这是规则,除非将数组输入指定为const,否则数组将始终是可修改的?

我知道类型检查的东西只发生在编译的时候,但是我仍然感到困惑的是技术上被称为通过引用(即仅当类型指针的参数被传递,或者指针数组是通过的时候)副参考?)

对不起,有这个问题的地方有一点,但由于我难以理解这一点,很难说明一个精确的询问.

解决方法 你有点错误:moreThings也衰减到第一个元素的指针,但由于它是一个数组的字符数组,第一个元素是一个“8个字符的数组”.所以衰减的指针是这样的:
char (*p)[8] = moreThings;

指针的值当然与& moreThings [0] [0]的值相同,即第一个元素的第一个元素的值,并且与& a相同,但该类型是不同的在每种情况下

这里是一个例子,如果char a [N] [3]:

+===========================+===========================+====|+--------+--------+-------+|+--------+--------+-------+||| a[0,0] | a[0,1] | a[0,2]||| a[1,0] | a[1,1] | a[1,2]|| ...|+--------+--------+-------+++--------+--------+-------++ ...|            a[0]           |            a[1]           |+===========================+===========================+====                                    a^^^||+-- &a[0,0]|+-----&a[0]+-------&a

>& a:char数组的整个数组的地址,这是一个char [N] [3]
>& a [0],与a:第一个元素的地址相同,它本身就是一个char [3]
>& a [0] [0]:第一个元素的第一个元素的地址,它是一个char

这表明不同的对象可能具有相同的地址,但如果两个对象具有相同的地址和相同的类型,则它们是相同的对象.

总结

以上是内存溢出为你收集整理的数组到指针衰减并将多维数组传递给函数全部内容,希望文章能够帮你解决数组到指针衰减并将多维数组传递给函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/langs/1248815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存