结果大小不同

jho*_*oll 16 c c++ sizeof

为什么不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)

  • 你需要更多upmods来获得聪明的解决方案. (2认同)