sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
测试代码:
#include<stdio.h>
typedef struct
{
char c1;
short int c2;
short int c[3];
}Test1TypeS;
#pragma pack(push) // 将当前pack设置压栈保存
#pragma pack(1)// 必须在结构体定义之前使用,1个字节对齐
typedef struct
{
char c1;
short int c2;
short int cc[3];
}Test2TypeS;
#pragma pack(pop) // 恢复先前的pack设置
#pragma pack(push) // 将当前pack设置压栈保存
#pragma pack(1)// 必须在结构体定义之前使用,1个字节对齐
typedef struct
{
char c1;
short int c2;
short int *pcc;
}Test3TypeS;
#pragma pack(pop) // 恢复先前的pack设置
Test1TypeS sc1; //没加结构对齐关键字
Test2TypeS sc2; //1个字节对齐
short int cc_buf[3];
Test3TypeS sc3 = {0, 0, cc_buf}; //1个字节对齐
int a1;
long int a2;
short int a3;
char a4;
float a5;
double a6;
char ba[7]={1,2,3,4,5,6,7};
char *pba=ba;
char *pba1;
short int bb[3]={1,2,3};
short int *pbb=bb;
short int *pbb1;
void main(void)
{
printf("以下是电脑 Window 10 64bit 系统下 Dev-C++ 64bit 软件测试结果。仅供C语言参考\n\n");
printf("int 字节长度:%d\n", sizeof(a1));
printf("long int 字节长度:%d\n", sizeof(a2));
printf("short int 字节长度:%d\n", sizeof(a3));
printf("char 字节长度:%d\n", sizeof(a4));
printf("float 字节长度:%d\n", sizeof(a5));
printf("double 字节长度:%d\n", sizeof(a6));
printf("\n");
printf("char ba[7]; sizeof(ba) = %d\n", sizeof(ba));
printf("char *pba=ba; sizeof(pba) = %d\n", sizeof(pba));
printf("char *pba1; sizeof(pba1) = %d\n", sizeof(pba1));
printf("\n");
printf("short int bb[3]; sizeof(bb) = %d\n", sizeof(bb));
printf("short int *pbb=bb; sizeof(pbb) = %d\n", sizeof(pbb));
printf("short int *pbb1; sizeof(pbb1) = %d\n", sizeof(pbb1));
printf("\n");
printf("Test1TypeS sc1; 默认字节对齐 sizeof(sc1) = %d\n", sizeof(sc1));
printf("Test2TypeS sc2; 1 个字节对齐 sizeof(sc2) = %d\n", sizeof(sc2));
printf("Test3TypeS sc3 = {0, 0, cc_buf}; 1 个字节对齐 sizeof(sc3) = %d\n", sizeof(sc3));
printf("short int cc_buf[3]; sc3.pcc = cc_buf; sizeof(sc3.pcc) = %d\n", sizeof(sc3.pcc));
}
运行结果:
结论注意点:
1,结构体要使用sizeof()要注意字节对齐问题。
2,sizeof(数组名) 是数组内存长度。
3,sizeof(指针变量) 是指针变量长度,与硬件位数有关,64位机是8Byte,32位机是4Byte。