有一个问题困惑我。在下面的代码中,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
答案 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)
quote
是main
函数范围内的数组。数组的大小是它占用的字节数,即字符串的长度,最后是空字节的长度+ 1。
当您将其传递给fortune_cookie
时,它会降级为指针。指针的大小在32位体系结构中是4个字节,在64位体系结构中是8个字节。要查看相同的输出,您可以更改fortune_cookie
:
void fortune_cookie(char msg[21])
但这通常不实用。
答案 3 :(得分:0)
Hiiii ..
当sizeof()应用于数组名称时,结果将是整个数组的大小(以字节为单位)。 这里,数组的名称将转换为指向数组第一个元素的指针。
现在当我们将这个数组作为参数传递给函数时,接收函数变量只是指向同一个数组的指针,我们不能将数组作为Call by Value传递。
所以“ sizeof(msg)”将始终显示指针的大小。