sizeof是C语言的一个单目运算符,并不是函数。sizeof以“字节大小”给出其操作数的存储空间。
* sizeof的使用方法:
1. 用于数据类型:
sizeof(int)。
2. 用于变量:
sizeof(var_name) 或sizeof var_name
注:
sizeof不能用于函数名声明、位字段、不完整类型。不完整类型指具有未知存储大小的数据类型, 如未知存储大小的数据类型、未知内容的结构或联合类型、void类型等。
* sizeof的结果
sizeof操 作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
1. 作用于数据类型返回数据类型的字节数。
2. 作用于(一般)变量,返回变量类型的字节数。
3. 作用于指针,依赖于编译器,一般返回4。
int * a = new int[50];
sizeof(a) == 4
char * b = “hello world”; /*b是一个指向固定字符串的字符型指针*/
sizeof(b) == 4
4. 作用于数组,返回数组的总字节数。
int k[50];
sizeof(k) == 200 == 4 * 50
char r[12] = 'hello world';
sizeof(r) == 12
5. 作用于结构体,返回结构体实际占用字节数,包括字节对齐产生的“空洞”。
注意:
结构中的静态成员不对结构的大小产生影响,因为静态变量的存储位置与结构的实例地址无关。
没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。
struct
{
char b;
double x;
}m;
sizeof(m) == 12 /*double类型的结构成员x要放在被4整除的地址*/
typedef struct pp
{
char a;
static int b; /*b不和a、c连续存储*/
int c;
}PP;
sizeof(PP) == 8
6. 作用于联合体,返回最大字节成员的字节数。
7. 作用于作为函数形参的数组名,或者作为函数形参的函数名,sixeof返回其指针的大小。
#include 'stdio.h'
unsigned char func(char s[])
{
printf('/n%d/n', sizeof(s)); /*sizeof(s) == 4*/
return 0;
}
int main(int argc, char * argv[])
{
char c[12];
printf('%d', sizeof(func(c))); /*此处func()函数不执行,相当于sizeof(unsigned char) == 1*/
func();
return 0;
}
无论数组名、指针,当作为参数时,子函数将全部其作为指针对待。可是说,数组和指针在作为函数形参时完全一样。