为什么n
在下面的函数中不等于8
?不同尺寸的结果
void foo(char cvalue[8])
{
int n = sizeof (cvalue);
}
但n
确实等于8
在这个版本的功能:
void bar()
{
char cvalue[8];
int n = sizeof (cvalue);
}
为什么n
在下面的函数中不等于8
?不同尺寸的结果
void foo(char cvalue[8])
{
int n = sizeof (cvalue);
}
但n
确实等于8
在这个版本的功能:
void bar()
{
char cvalue[8];
int n = sizeof (cvalue);
}
因为你不能将整个数组作为函数参数C.你实际上是在传递指针对它;括号是句法糖。不能保证你指向的数组大小为8,因为你可以通过这个函数任意你想要的字符指针。
// These all do the same thing
void foo(char cvalue[8])
void foo(char cvalue[])
void foo(char *cvalue)
在第一个例子,cvalue作为传递的参数是真的只是一个指向一个字符数组,当你把它的sizeof()
,你得到的指针的大小。在第二种情况下,您已将其声明为局部变量,您将获得整个数组的大小。
32位系统上的参数大小将为4,在使用-m64编译的64位系统上的大小将为8.这是因为数组作为函数中的指针传递。指针只是一个内存地址。
C和C++数组不是头等对象;你不能将数组传递给函数,它们总是衰减到指针。
但是,您可以将指针和引用传递给数组。这可以防止数组边界衰减。所以这是合法的:
template<typename T, size_t N>
void foo(const T(&arr)[N])
{
int n = sizeof(arr);
}
你值得拥有更多的upmods为你的聪明的解决方案。 – 2009-05-20 11:03:27
更喜欢语法氰化物... – 2015-12-21 12:23:07