• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

结构类型计算字节sizeof,人工,编译器,指针。

        编译器算出来的字节数比人工算出来的多,编译器考虑到字节对齐的原因,要求4字节对齐,读取效率加快。

       人工是按1字节进行对齐。

人工的

#include<stdio.h>
#pragma pack (1)
struct student
{
	char name[20];
	char num[10];
	int age;
};
int main(int argc, char* argv)
{
	int a,i;
	struct student st[1];
	scanf("%s %s %d",st[0].num,st[0].name,&st[0].age);
	printf("%s %s %d\n",st[0].num,st[0].name,st[0].age);
	printf("%d",sizeof(struct student));
}

编译器的

#include<stdio.h>
struct student
{
	char name[20];
	char num[10];
	int age;
};
int main(int argc, char* argv)
{
	int a,i;
	struct student st[1];
	scanf("%s %s %d",st[0].num,st[0].name,&st[0].age);
	printf("%s %s %d\n",st[0].num,st[0].name,st[0].age);
	printf("%d",sizeof(struct student));
}

指针变量的字节,就是地址的所占字节,跟访问的变量无关。int p;struct student *q;

#include<stdio.h>
#pragma pack (1)
struct student
{
	char name[20];
	char num[10];
	int age;
};
int main(int argc, char* argv)
{
	int p;
	struct student *q;
	int a,i;
	struct student st[1]={"2017002","李四",21};
	/*scanf("%s %s %d",st[0].num,st[0].name,&st[0].age);*/
	printf("%s %s %d\n",st[0].num,st[0].name,st[0].age);
	printf("%d\n",sizeof(struct student));
	printf("%d\n",sizeof(p));
	printf("%d\n",sizeof(q));
}

 

posted on 2022-04-12 20:03  王陈锋  阅读(25)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3