0

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

#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

upd刚刚发现类似的问题当一个函数有一个特定大小的数组参数时,为什么用指针替换它?

4

1 回答 1

4

您正在使用 a 的大小char*,而不是 80 个字符的数组。

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

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

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

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

于 2013-05-04T08:02:01.083 回答