不同大小的结果
时间:2020-03-05 18:49:07 来源:igfitidea点击:
为什么以下函数中的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); }