结构体的学习

结构体的学习

一、结构体。

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 语言中允许程序员将不同型的数据组合在一起形成一个新的数据型。`struct person` 是一种典型的结构体声明方式,它表示了一种新的数据型 `person`[^1]。 以下是创建一个基本结构体的示例代码: ```c // 声明一个名为 struct Person 的结构体 struct Person { char name[50]; int age; float salary; }; ``` 在此基础上,可以通过定义具体的变量来实例化该结构体: ```c // 创建并初始化一个结构体变量 struct Person p1 = {"Tom", 28, 15000.50}; ``` #### 使用结构体数组解决实际问题 当需要管理多个具有相同属性的对象时,可以利用结构体数组的概念。例如,如果要存储多名员工的信息,则可以用如下方法实现: ```c #define MAX_PERSONS 100 // 定义结构体数组 struct Person employees[MAX_PERSONS]; // 初始化第一个员工信息 strcpy(employees[0].name, "Jerry"); employees[0].age = 30; employees[0].salary = 20000.75; // 访问第二个员工信息 printf("Employee Name: %s\n", employees[1].name); ``` 对于涉及排序的需求,通常采用冒泡排序或其他简单算法完成操作[^2]。下面是一个基于年龄字段对人员列表进行升序排列的例子: ```c void sortPersonsByAge(struct Person persons[], int size) { for (int i = 0; i < size - 1; ++i) { for (int j = 0; j < size - i - 1; ++j) { if (persons[j].age > persons[j + 1].age) { // Swap elements using a temporary variable struct Person temp = persons[j]; persons[j] = persons[j + 1]; persons[j + 1] = temp; } } } } ``` #### 推荐学习资源 为了更深入理解结构体及其应用,可以从以下几个方面入手: - **官方文档**:查阅权威书籍《The C Programming Language》第二版中的相关内容。 - **在线教程**:访问知名教育平台如 GeeksforGeeks 或者 W3Schools 上有关 C 语言结构体的教学文章。 - **实践项目**:尝试自己动手编写一些小型程序,比如学生管理系统或者图书借阅记录维护工具等案例研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值