我知道一个数组衰减为一个指针,这样如果一个声明
char things[8];
然后在things
其他地方使用,things
是指向数组中第一个元素的指针。
另外,据我了解,如果有人声明
char moreThings[8][8];
thenmoreThings
不是指向 char 的指针类型,而是类型为“指向 char 的指针数组”的类型,因为衰减只发生一次。
什么时候moreThings
传递给一个函数(比如原型void doThings(char thingsGoHere[8][8])
,堆栈到底发生了什么?
如果moreThings
不是指针类型,那么这真的还是传递引用吗?我想我一直认为它moreThings
仍然代表多维数组的基地址。如果doThings
接受输入thingsGoHere
并将其传递给另一个函数怎么办?
规则是否差不多是除非指定一个数组输入,否则const
该数组将始终是可修改的?
我知道类型检查的东西只发生在编译时,但我仍然对技术上算作通过引用传递的东西感到困惑(即只有当类型指针的参数被传递时,或者指针数组是传递时也可以通过引用?)
很抱歉,这个问题有点到处都是,但由于我难以理解这一点,因此很难表达出精确的询问。