我之前读到了一个问题,由于是与下面这个问题完全相同而被关闭:当函数有一个特定大小的数组参数时,为什么它会被替换成一个指针?以及如何找到指向数组的指针的“sizeof”?但是在阅读了这些内容之后,我仍然不理解sizeof()如何工作。我知道将数组作为参数传递给函数,例如:
如果一切正常,上述输出应该是
void foo(int a[5])
如果将数组作为参数传递,将导致数组参数衰减为指针。但在上述两个问题链接中,我没有找到一个明确的答案,说明为什么sizeof()
函数本身豁免于(或至少表面上豁免于)这种指针衰减行为。如果sizeof()
像其他函数一样运作,则
int a[5] = {1,2,3,4,5};
cout << sizeof(a) << endl;
如果一切正常,上述输出应该是
4
而不是20
。如果我错过了一些明显的东西,那么这似乎与指针衰减行为相矛盾。很抱歉再次提起这个问题,但尽管多年来一直快乐地使用这个函数而没有真正考虑它,但我确实很难理解为什么会发生这种情况。
void foo(int (&a)[5])
不会导致数组参数退化。重要的是目标,而不是源。 - Xeo