程序员人生 网站导航

C/C++编程:有关数组形参的探究

栏目:综合技术时间:2014-01-20 05:27:41

今天研究了一下sizeof,之前一直以为它是函数,因为它有参数也有返回值,不过今天发现sizeof实际上是一个...恩,算是运算符吧,或者说他是一个宏,因为他是在编译时确定值的,而表达式中的任何运算和函数调用都不会发生。不过有一个例外是C99支持的不定长数组,这时会计算不定长数组的长度。

废话少说,先看一段代码,今天测试sizeof的时候发现的。

#include <iostream>
#define SIZE 10

using namespace std;

int size1(int array[SIZE])
{
return sizeof(array);
}

int size2(int (&array)[SIZE])
{
return sizeof(array);
}

int main()
{
int array[SIZE];
cout << sizeof(array) << endl;
cout << size1(array) << endl;
cout << size2(array) << endl;
return 0;
}

代码运行的结果是

40
4
40

第一个结果不解释了,就是数组所占的内存空间。

第三个结果也不解释了,引用就表示数组本身,也是数组所占的内存空间。

关键来看一下第二个结果。在C语言中,数组名是被当成指针来处理的,具体来讲数组名就是指向数组首元素地址的指针,因此,当数组名被当成参数传递到函数中时,数组名会自动转变成指针,所以此时sizeof的结果就是指针所占的内存大小,在32位系统下就是4

另一个概念,C语言的编译器遇到数组元素array[i],就会替换成*(array+i)的形式。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐