char 指针作为函数参数

标签 c sizeof

我有一个函数 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/

相关文章:

c - 在 C 中将可变长度数组声明为全局变量

c - 排序指针数组

c - 在 Windows 和 Linux 下如何链接到 OS C 库?

c - qsort() 对一个字符串数组进行排序,但在另一个字符串数组上出现段错误

c - 为什么我得到对 pthread_mutexattr_settype 的 undefined reference ?

c - 在结构上使用 sizeof 运算符

c - 使用 sizeof 计算数组的长度

c++ - 我怎样才能得到一个vector::value_type的sizeof?

c++ - 将一个数组中的 char 值分配给另一个数组中的 char 值

c++ - sizeof(值)与 sizeof(类型)?