最近,我在调试一个程序时发现了一个经常犯的错误,但在编译过程中并没有显示为警告,因此我一直认为一切都很顺利,没问题。我对下面的代码有点困惑:
void foo(char b[2]);
char a[2] = {1, 2};
foo(a); // I always assumed that this would pass the entire array to be
// duplicate in stack, guess I was wrong all this while
// Instead the address of the array was passed
void foo(char b[2])
{
// Value of b[0], b[1]?
// Does this mean : 1) b[0] == &a[0]?
// or 2) b[0] == &a[0+2]?
// Compiler didn't complain, so I assume this is a valid syntax
}
f
,并且在f
内部,您可以访问数组中的所有有效位置而不会出现问题。但是,如果您尝试访问超出实际数组大小的位置,则会导致未定义行为,这意味着任何事情都可能发生。 - lccarrasco