结构体的学习

结构体的学习

一、结构体。

1)定义结构体和变量:struct student{

                      int num;

                  char name[20];

                  float score[3];

              }stu1;

              struct stu2,stu3[2] = {1000,”zhangsan”,70,80,90,1001,”lisi”,57,58,59};

2)给结构体中字符数组赋值:strcpy(stu1.name,”zhangsan”);

3)结构体成员的三种表示方法:struct student stu1, * ptr;

                      stu1.num = 1001;

                      ptr->num = 1002;

                      (* ptr).num = 1003;

4)内存的计算:(结构体内存以四个字节对齐)

    例一:(1)中的结构体所占空间36个字节。

例二:#include <stdio.h>
typedef struct
{
  int    aa1;      //4
个字节对齐 1111
  char bb1   ;   //1
个字节对齐 1
  short cc1;      //2
个字节对齐 011
  char dd1;      //1
个字节对齐 1
  } testlength1;
int length1 = sizeof(testlength1); //4
个字节对齐,占用字节11111011 1000,length = 12

例三:#include <stdio.h>
typedef struct
{
  int    aa1;      //4
个字节对齐 1111
  char bb1   ;   //1
个字节对齐 1
  short cc1;      //2
个字节对齐 011
  char dd1;      //1
个字节对齐 1
  } testlength1;
int length1 = sizeof(testlength1); //4
个字节对齐,占用字节11111011 1000,length = 12

    

二、联合的使用:(共用同一内存,所占内存以最大字节算)

union data{

    intdata;

    char c;

    double f;

}

union data s1;

len = sizeof(s1);---------len = 8;从第一个地址开始,以最大字节为算。

#pragma pack(n)-----n字节对齐

三、typedef的用法:typedef  原有类型名  新类型名

   (1)  typedef  int NUM[100];(二维数组同理)

      NUM  a---------int a[100]

(2)  typedef  char* STRING;

STRING  str------char* str

(3) typedef  int  (* POINT) (int);

      POINT f---------int  (* f) (int)

(4) typedef  unsigned  char uchar;

      uchar a---------unsigned char a

(5) typedef  int*  NUM[3];

      NUM a---------int*  a[3]

(6) tyrpdef  struct  Node{

        int data;

        struct Node*  ptr;

    }PNode;

 

    PNode  N1;

----struct  Node {

            int data;

            PNode*  ptr;

        };

四、volatile:它所修饰的变量会改变,提醒编译器每次都到内存中取值。

五、大端模式和小端模式

大端模式:高位数据放在低地址;低位数据放在高地址。

小端模式:低位数据放在低地址;高位数据放在高地址。

例题:

#include <stdio.h>

union data{

   char a[4];

    inti;

};

int main()

{

   union data s1;

   s1.a[0] = 0x78;

   s1.a[1] = 0x56;

   s1.a[2] = 0x34;

   s1.a[3] = 0x12;

   printf("s1 = %x\n", s1.i);

   return 0;

}

结果:s1 = 12345678

高地址-------------低地址。

s1.a[0]是低地址,输出结果78也放在低地址位置,所以为小端模式。

### C语言结构体学习教程与资源 #### 了解基本概念 结构体是一种用户自定义的数据类型,允许存储不同类型的数据项。通过组合不同类型的变量形成一个新的复合型数据单元[^3]。 ```c struct student { int id; char name[100]; int num[2]; } stu[2]; ``` 这段代码展示了如何创建一个名为`student`的结构体,其中包含了整数、字符数组以及另一个整数数组作为成员。接着声明了一个由两个这样的学生记录组成的数组`stu`。 #### 初始化结构体实例 可以采用多种方式初始化结构体对象,包括直接赋值或使用指针数组指向多个结构体实例[^2]: ```c // 给结构体指针数组赋初值的方法之一 struct struct_original *struct1[20]; for (int i = 0; i < 20; ++i) { struct1[i] = malloc(sizeof(struct struct_original)); } ``` 这里展示的是动态分配内存并将其地址赋予指针数组中的每一个元素的过程。 #### 输入处理 当需要从标准输入读取数据填充到结构体内存区域时,可利用循环配合`scanf()`函数逐个访问各个字段完成操作[^4]: ```c for (int i = 0; i < count; ++i) { scanf("%d", &stu[i].id); } ``` 此片段说明了怎样迭代遍历整个集合并对特定属性执行I/O操作。 #### 减少内存消耗的技术 对于那些关注性能优化的应用场景而言,合理调整结构体内部成员排列顺序能够有效降低整体所占字节数量。这通常涉及到依据各组成部分的实际需求重排它们之间的相对位置以消除不必要的对齐间隙[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值