我有一个函数 A,它有一个 char *
参数。在 A()
中,我使用 sizeof
来计算 buf 的大小,但我在 i686 机器上得到 8 个,在 armel 机器上得到 4 个。为什么不是128?片段如下:
void A(char *p)
{
printf("sizeof p is %d\n", sizeof(p));
}
int main(void)
{
char buf[128];
printf("sizeof buf is %d\n", sizeof(buf));
A(buf);
return 0;
}
结果是这样的(在 i686 中):
sizeof buf is 128
sizeof p is 8
请告诉我原因。
最佳答案
在
main()
函数中,buf
是一个数组,所以sizeof buf
给出了这个数组的大小:sizeof(char[128])
(128 字节)。这是因为当用作sizeof
运算符的操作数时,数组不会转换为指针。在
A()
函数中,p
是一个指针,所以sizeof p
给出了这个指针的大小:sizeof(char *)
(在您的实现中为 8 个字节)。
关于char 指针作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424078/