char指针作为函数参数

时间:2013-07-02 11:12:57

标签: c sizeof

我有一个具有char *参数的函数A.在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

请告诉我原因。

4 个答案:

答案 0 :(得分:2)

  • main()函数中,buf是一个数组,因此sizeof buf给出了此数组的大小:sizeof(char[128])(128字节)。这是因为当用作sizeof运算符的操作数时,数组不会转换指针。

  • A()函数中,p是一个指针,因此sizeof p给出了此指针的大小:sizeof(char *)(实现时为8个字节)。< / p>

答案 1 :(得分:2)

sizeof(buf)128*sizeof(buf[0]),而sizeof(p)仅为sizeof(char*)

答案 2 :(得分:1)

因为您打印指针的大小,而不是它指向的大小。数组衰减到指针,一旦你将它传递给一个函数,你就会有一个指针,并且会丢失原始数组的所有大小信息。

答案 3 :(得分:0)

当传入函数时,它会衰减为具有原始大小(4或8)大小的普通指针。

使用strlen(),因为它在末尾检查“null”,如果数组已经初始化,则给出正确的大小。