我知道数组会衰变为指针,这意味着如果声明
char things[8];
然后稍后在其他地方使用things
,things
是指向数组中第一个元素的指针。
此外,据我所知,如果声明了
char moreThings[8][8];
那么moreThings
实际上不是指向char类型的指针,而是"指向char指针的数组"类型,因为衰减只发生一次。
当将moreThings
传递给函数(比如原型为void doThings(char thingsGoHere[8][8])
的函数),堆栈上实际发生了什么?
如果moreThings
不是指针类型,那么这真的还是按引用传递吗?我想我一直认为moreThings
仍表示多维数组的基地址。如果doThings
接受输入thingsGoHere
并将其传递给其他函数呢?
规则是否大致是,除非将数组输入指定为const
,否则该数组将始终可修改?
我知道类型检查只发生在编译时,但我仍然困惑于什么技术上算是按引用传递(即仅当传递指针类型的参数时才会发生,还是指向指针的数组也算按引用传递?)
对于这个问题有点散乱,抱歉,但由于难以理解,很难表达一个精确的问题。
void doThings(char thingsGoHere[8][8])
实际上等同于void doThings(char (*thingsGoHere)[8])
,因此接受任何第二维为 8 的二维数组,因此“仅接受大小为 8*8 的 char 二维数组”是不正确的。 - legends2k