结构体

结构体

我们知道存储大量整型数据可以用定义int a[N]的方式处理,其他的还有char a[N]、int *p[N]等,但是要存储多个类型的数据就只能靠结构这个数据类型。

结构的概念

结构是一种特殊的数据类型,它由程序员构造而非编程语言固有的基本数据类型.

结构的声明

1.它可以由多个不同的基本数据类型构成,如:

struct student
{
int a;
double b;
char c;
};//注意分号,代表声明结束,就像函数声明一样

2.它也可以由构造的数据类型组成,如:

struct date{
int year;
int month;
};
struct student
{
struct date brithday;
};

结构的引用

当用上述方法声明了结构体类型后,接下来就要用该结构体类型定义一个结构体变量。例如要定义一个struct student类型的名为stu数组,可以在
声明结构体类型的时候定义变量

struct student
{
int StudentID;
char name[10];
char sex;
int score[4];
}stu[16];

也可以声明后再定义

struct student
{
int StudentID;
char name[10];
char sex;
int score[4];
};
struct student stu[16];

结构的内存

结构的内存与对齐方式有关
1.默认的对齐方式

struct sample
{
char a;
int b;
char c;
};

在《c语言程序设计》中,简单的方法是将结构体中每一个变量都与占最大字节数的成员对齐,如上,char型本来只占一个字节,但为其分配和int型占的4个字节(新添的3个字节是空白的),为了能让int型在一次内存访问中通过,因此struct sample共占3*4=12个字节的内存; 另外一种高大上的算法是计算偏移量,第一个数据的偏移量是0,第二个数据的偏移量是1,但是1不是sizeof(int)的倍数,要加上3字节才能成为sizeof(int)的倍数,第三个数据的偏移量是8,是sizeof(char)的倍数,这时总内存为1+3+4+1=9,而9不是sizeof(int)的倍数,再加上3字节,最后总内存就是12.
2.自定义字节对齐方式
pragmapack(n)来设定变量以n字节对齐方式,然后方法与上述一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值