如果通过函数传递参数,sizeof返回错误的值

时间:2013-05-04 08:00:18

标签: c++ sizeof

让我通过这个测试程序问我的问题:

#include <iostream>

void testSizeOf(char* buf, int expected) {
    std::cout << "buf sizeof " << sizeof(buf) << " expected " << expected << std::endl;
}


int main ()
{
    char buf[80];
    testSizeOf(buf, sizeof(buf));
    return 0;
}

输出:

 buf sizeof 8 expected 80

为什么我会收到8而不是80

更新刚发现类似问题When a function has a specific-size array parameter, why is it replaced with a pointer?

1 个答案:

答案 0 :(得分:4)

你的大小为char*,而不是80个字符的数组。

一旦它被衰减为指针,它就不再被视为testSizeOf中的80个字符的数组。它被视为正常的char*

至于可能的原因,请考虑以下代码:

char* ch = new char[42];
testSizeOf(ch, 42);

你期望sizeof能在那里神奇地工作吗?