Sizeof用法
首先说明一下sizeof是c语言运算符,在编译阶段就执行了,和普通的+、-、*等一样。
Sizeof有二种语法形式:1、sizeof(对象)或sizeof对象2、sizeof(类型)(可以是抽象类型也可以是一般类型)
举个例子就明白了,int i。可以用sizeof i或者sizeof(i),求得的是i这个对象所占用空间字节数,显然是4;sizeof(int),求得的是这个object类型的空间大小。比如char是1个字节。
Sizeof有几种常出错用法,分别是:1,求数组大小;2,求指针大小3,对函数使用4.求结构体大小。5、对共用体union使用下面一一解答
一、数组大小;求得是你定义时候的声明的数组大小空间,不管你这个空间用完没有。
来个例子:char a[100]=’1281’。然后sizeof(a)求得是100。而不是你用strlen求得的4.(strlen遇到‘/0’就结束计数,而且strlen只能求字符串的大小)
二、求指针大小。这个求得是你这个指针里面的内容到底占几个字节,则和你计算机的位数有关,你是32为就是4字节,你是64位就是8字节。比如 char *p=‘1281’;然后sizeof(p)对于32为是4,64位是8.sizeof(*p)是1,相当求sizeof(p[0])。
三、对函数使用。Char fool(char p[100]){sizeof(p)};这个结果是p相当于求指针。4或者8.
Sizeof(fool(’1281’))结果是1,因为返回类型是char
四、对结构体使用时比较复杂的。
在讲解之前先探讨一个问题,即结构体边界对齐问题。对齐有利于计算机的读取速度。对齐满足三个原则1)结构类型的首地址能够被其最宽基本类型成员大小所整除2)结构体中每一个基本类型所在的首地址必须是该类型的大小的整数倍,如果有需要在成员之间填充字节3)整个结构体的大小必须是其最宽基本类型成员的整数倍。
来个例子最能说明问题。
再来看另外一种情况: