C阵列的大小

时间:2013-12-12 06:33:26

标签: c arrays

有一个问题困惑我。在下面的代码中,msg和quote都是char数组。为什么sizeof(msg)和sizeof(quote)给了我不同的结果?

代码:

#include <stdio.h>

void fortune_cookie(char msg[])
{
    printf("Message reads: %s\n",msg);
    printf("msg occupies %i bytes\n",sizeof(msg));

}

int main()
{
    char quote[] = "Cookies make you fat";

    printf("quote occupies %i bytes\n",sizeof(quote));

    fortune_cookie(quote);
    return 0;
}

结果:

quote occupies 21 bytes                                                                                                              
Message reads: Cookies make you fat
msg occupies 8 bytes

4 个答案:

答案 0 :(得分:1)

sizeof一个数组等于每个元素的总共sizeof

将数组传递给函数时,它会传递指针。

在你的情况下:

quote占用21个字节:表示您的char数组有21个元素,每个元素大小为1。 msg占用8个字节:表示您的参数是指针,它将在64位计算机上保留8个字节,在32位计算机上保存4个字节。

答案 1 :(得分:0)

此处char quote[] = "Cookies make you fat";quote[]内的消息分配内存,这就是quote[]的大小为21字节的原因。

void fortune_cookie(char msg[])此处char msg[]char *msg相同,并且是指向quote的指针,因为您将引号传递给fortune_cookie(quote); 指针的大小取决于机器。我认为你使用的是64位机器,这就是为什么你的大小为8的原因。

答案 2 :(得分:0)

quotemain函数范围内的数组。数组的大小是它占用的字节数,即字符串的长度,最后是空字节的长度+ 1。

当您将其传递给fortune_cookie时,它会降级为指针。指针的大小在32位体系结构中是4个字节,在64位体系结构中是8个字节。要查看相同的输出,您可以更改fortune_cookie

的签名
void fortune_cookie(char msg[21])

但这通常不实用。

答案 3 :(得分:0)

Hiiii ..

当sizeof()应用于数组名称时,结果将是整个数组的大小(以字节为单位)。 这里,数组的名称将转换为指向数组第一个元素的指针

现在当我们将这个数组作为参数传递给函数时,接收函数变量只是指向同一个数组的指针,我们不能将数组作为Call by Value传递。

所以“ sizeof(msg)”将始终显示指针的大小。

参考。http://en.wikipedia.org/wiki/SizeofStack