传递数组(结构的成员)来运行

时间:2014-02-18 05:17:17

标签: c arrays parameters struct sizeof

我试图通过引用将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?

2 个答案:

答案 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个字节的内存。