让我通过这个测试程序问我的问题:
#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?
答案 0 :(得分:4)
你的大小为char*
,而不是80个字符的数组。
一旦它被衰减为指针,它就不再被视为testSizeOf中的80个字符的数组。它被视为正常的char*
。
至于可能的原因,请考虑以下代码:
char* ch = new char[42];
testSizeOf(ch, 42);
你期望sizeof能在那里神奇地工作吗?