我试图通过引用将1-D字符数组传递给函数。以下是相关代码:
void function1();
void function2(struct template *);
struct template{
char array[11];
};
function1()
{
struct template myStruct = {0}; //initializing
function2(&myStruct);
}
function2(struct template *myStruct)
{
void writeToArray(char array[11]); //locally declaring a function
writeToArray(myStruct->array);
}
void writeToArray(char array[11])
{
/*** stuff ****/
}
现在,在调试此代码时,我得到了意想不到的结果。输入writeToArray()后,我调用
p sizeof(array)
返回4.不应返回值11吗?
我知道所有变量的“sizeof”是在编译时静态设置的。那么为什么编译器认为writeToArray()的“char array [11]”是size == 4?
答案 0 :(得分:0)
当您声明void writeToArray(char array[11])
时,它实际上是声明:
void writeToArray(char *array)
。
你可以通过查找'衰减到指针'找到更多相关信息。
所以当你sizeof(array)
时,你得到了指针的大小。
如果您想维护此数组大小,请尝试改为使用void writeToArray(char (&array)[11])
。
这是通过引用传递数组,然后将其声明为大小为11的数组。它将返回您期望的值sizeof
。
注意:即使您的方式有效,您也很难对值11进行编码,因此您最好只声明const
值并完全忘记sizeof
。或者,重新考虑一下为什么要对大小进行硬编码。
答案 1 :(得分:0)
将数组作为参数传递给函数时,数组的起始地址将传递给函数。这里引用是指定的内存位置,占用主机系统上的4个字节的内存。