c/c++基础知识-结构体

1.结构体

类似于Javaben,C语言中可以将一些其他变量,封装成结构体,结构体和共用体表示的含义是一样的。

 

声明

struct Student // struct 相当于class Student 相当于类名

{

   char name[50];

   int age;

} student,a; .//可以不定义,便是结构体变量,也就是Student类型的变量

//使用typedef定义别名

typedef struct {

    char name[50];

   int age;

} Student;

 

2. 内存对齐

对齐根数据在结构体中的位置有关。如果一个变量的内存地址正好位于他的长度的整数倍,他就被称作自然对齐。不如32位CPU下,假设一个整形变量的位置为0x00000004 ,那他就是自然对齐。

3.结构体大小

当结构体需要内存过大,使用动态内存申请。结构体占用字节数和结构体内字段有关,指针占用内存就是4/8个字节,因此传指针比传值效率更高。

遵循原则

    结构体变量中的成员的偏移量必须是成员大小的整数倍

   结构体大小必须是所有程序大小的整数倍,也即所有成员大小的公倍数

内存对齐的原因:

在32位操作系统中(64位要兼容,主要考虑32位),数据总线是32位,地址总线是32位。

地址总线32位,意味着寻找地址是按4递增的,数据总线32位意味着一次可读写4byte

提升寻址效率

 

struct Student
{
    short j;
    int i;
    short k;

} s1,s2;


int main() 
{
    struct Student student;
    student.i = 10;
    student.j = 5;

    s1.i = 10;
    s1.j = 5;
    printf("结构体大小%d   ", sizeof(student)); 
    system("pause");
    return 0;
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值