关键字--sizeof
sizeof的作用是求取数据类型或变量在内存中占用字节数的多少。一般的用法例如sizeof(int),很像函数用法,但是sizeof并不是一个函数,而是关键字。sizeof的结果在编译时就确定。
从代码来分析sizeof在不同情况下获得的结果:
sizeof(int); //32位机子下结果是4
int a[10];
sizeof(a);//数组变量a占用的内存字节数,结果是 10*sizeof(int)=40
sizeof(&a); //&a是一个指针,结果为指针变量占用的字节数4
还有一种情况:
void fun(int a[10])
{
sizeof(a);
}
此处sizeof(a)的结果是多少呢?
结果是4.
先来分析一下:
一般来说函数传递参数过程中,传递到函数内的数值实际上都是实参的一个拷贝,所以在函数内修改传递过来的参数数值不会影响实参本身。但是当数组作为函数参数时,考虑到为数组建立拷贝可能需要消耗大量的时间和内存空间,非常不划算。所以数组作为函数参数一律会被编译器解析为数组指针。上面的代码在编译器看到的实际上就是这样子,
void fun(int *a)
{
sizeof(a); //等效为sizeof(int *),所有指针类型变量占用的内存为4个字节
}
因为编译器的这个特性,编译器不会关心数组作为函数参数时的长度,‘void fun(int a[10])’中的10可以不写,或者写其他数字也没有影响。