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

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。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值