为什么不n
等于8
以下功能?
void foo(char cvalue[8])
{
int n = sizeof (cvalue);
}
Run Code Online (Sandbox Code Playgroud)
但n
确实等于8
这个版本的功能:
void bar()
{
char cvalue[8];
int n = sizeof (cvalue);
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ack 46
因为你不能将整个数组作为C中的函数参数传递.你实际上是在向它传递一个指针; 括号是句法糖.无法保证您指向的数组大小为8,因为您可以将此函数传递给您想要的任何字符指针.
// These all do the same thing
void foo(char cvalue[8])
void foo(char cvalue[])
void foo(char *cvalue)
Run Code Online (Sandbox Code Playgroud)
DrP*_*zza 14
C和C++数组不是第一类对象; 你不能将数组传递给函数,它们总是衰减到指针.
但是,您可以传递指针和数组引用.这可以防止数组边界衰减.所以这是合法的:
template<typename T, size_t N>
void foo(const T(&arr)[N])
{
int n = sizeof(arr);
}
Run Code Online (Sandbox Code Playgroud)