sizeof() 代码示例详解(变量,数组,指针,结构体)

sizeof() 代码示例详解(变量,数组,指针,结构体),第1张

sizeof() 代码示例详解(变量,数组,指针,结构体)

sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。

测试代码:
#include

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语言参考nn");
    
    printf("int       字节长度:%dn", sizeof(a1));
    printf("long int  字节长度:%dn", sizeof(a2));
    printf("short int 字节长度:%dn", sizeof(a3));
    printf("char      字节长度:%dn", sizeof(a4));
    printf("float     字节长度:%dn", sizeof(a5));
    printf("double    字节长度:%dn", sizeof(a6));
    
	printf("n");
    printf("char ba[7];   sizeof(ba)   = %dn", sizeof(ba));
    printf("char *pba=ba; sizeof(pba)  = %dn", sizeof(pba));
    printf("char *pba1;   sizeof(pba1) = %dn", sizeof(pba1));
    
	printf("n");
    printf("short int bb[3];   sizeof(bb)   = %dn", sizeof(bb));
    printf("short int *pbb=bb; sizeof(pbb)  = %dn", sizeof(pbb));
    printf("short int *pbb1;   sizeof(pbb1) = %dn", sizeof(pbb1));
    
	printf("n");
    printf("Test1TypeS sc1;                  默认字节对齐 sizeof(sc1) = %dn", sizeof(sc1));
    printf("Test2TypeS sc2;                  1 个字节对齐 sizeof(sc2) = %dn", sizeof(sc2));
    printf("Test3TypeS sc3 = {0, 0, cc_buf}; 1 个字节对齐 sizeof(sc3) = %dn", sizeof(sc3));
    printf("short int cc_buf[3]; sc3.pcc = cc_buf;    sizeof(sc3.pcc) = %dn", sizeof(sc3.pcc));
}
运行结果:

结论注意点: 1,结构体要使用sizeof()要注意字节对齐问题。 2,sizeof(数组名) 是数组内存长度。 3,sizeof(指针变量) 是指针变量长度,与硬件位数有关,64位机是8Byte,32位机是4Byte。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存