• C语言--结构体


    一、结构体

    1.结构体变量的定义

     * 结构体可以由多个不同类型的数据构成

     * struct Person {int age; double height; char *name}; //先定义结构体类型,该结构体有三个成员或者属性

     * struct Person p = {18, 1.80, "jack"}; //再根据结构体类型定义变量,并进行初始化

    2.结构体变量属性的赋值

     1>变量属性赋值1

     struct Person p = {18, 1.80, "jack"};

     //属性的修改

     p.age = 20;

     p.height = 1.78;

     p.name = "rose";

     p = {19, 1.77, "jame"};// 错误赋值方式,只能在定义变量是进行初始化

     2> 结构体变量赋值2

     struct Person p2 = {.age =19 ; .height =176 ; .name ="tom" };

    3.结构体内存分析

     1> struct Date {int year ;int month; int day} ;//本行代码只是定义了一个结构体类型,并未分配存储空间

     2> struct Date d1 = {2011,4,10};//定义结构体变量(真正分配存储空间),结构体变量的存储空间就是它所有变量的和(只限于结构体内所有变量类型相同的情况)--12个字节,可以用sizeof(d)检测

     3> struct Student {int age; char *name};

      struct  Student stu = {18, "jary"};// 此时结构体变量占用16个字节。因为当结构体变量是不同类型的数据时,存储空间为最大类型数据字节的倍数

    4.结构体变量的多种定义方式

     1> struct Person {int age; double height; char *name};

      struct Person p = {18, 1.80, "jack"};

     2> struct Person {int age; double height; char *name} p1;//定义结构体的同时定义了变量

      struct Person {int age; double height; char *name} p2;//错误写法,结构体类型重复定义

     3> struct {int age; double height; char *name} p3;//缺点:不能重复定义变量

    5.结构体作用域

     * 结构体类型也有作用域,从定义类型的那一行开始,一直到代码块结束

     * 可以对比全局变量和局部变量,进行定义和使用

    6.结构体数组

     1>结构体数组定义

      struct Person {int age; double height; char *name};

      struct Person names[3] = { {18, 1.80, "jack"},  {18, 1.80, "jame"},  {18, 1.80, "tom"}};

    7.指向结构体的指针

     1> 指针的定义

       struct Person {int age; double height; char *name};//定义类型

      struct Person p1 = {18, 1.80, "jack"};//定义结构体变量

      struct Person *p; //定义了struct Person类型的指针

      p = &p1;//指针变量p指向了p1变量

     2> 访问结构体变量属性的方式

     ① p1.age; p1.height;p1.name; //利用变量名直接访问

     ② (*p).age; (*p).height; (*p).name; //利用指针访问

     ③ p->age; p->height; p->name; //利用指针箭头

    8.结构体嵌套

     1> struct Date {int year ;int month; int day};

      struct Student {int age; double height; struct Date birthday};//结构体嵌套定义

      struct Student stu = {18,188,{1996,9,9}};

    二、数据类型总结

    1.基本数据类型

     1> int

     ①long int、long:8个字节 %ld

     ②short int、short:2个字节 %d、 %i

     ③unsigned int、unsigned:4个字节%d、%i

     ④signed int、signed:4个字节%d、%i

     2> float/double

     ①float:4个字节 %f

     ②double:8个字节 %f

     3>char

     ①1个字节 %c、%d

     ②char类型保存在内存中的是它的ASCII值;'A'-->65

    2.构造类型

     1>数组:只能存储同一种类型的数据

      定义:数据类型 数组名[元素个数]

     2>结构体:可以由多个不同的类型数据组成

      定义:先定义类型 再利用类型定义变量

    3.指针类型

     1> 变量的定义:int *p;

     2> 间接操作变量的值,int a = 10;int *p;p = &a;*p = 20;

    4.枚举类型

     1> 使用场合:当一个变量的取值,只有几个固定取值时

    三、自我总结

      基本数据类型,或者C语言数组中只能存放同种数据类型中的一个或几个数据,在实际应用中受到很多限制,不能满足我们的需求。而结构体的出现大大弥补了这起、中缺陷的不足,它可以根据不同的需求,定义不同的结构体以满足我们的需要,不管是是数量还是类型方面都很好的拓展了数据所能表示的范围,如果再喝typedef结合使用更是相辅相成,大大满足了我们的需求。

  • 相关阅读:
    Arduino101学习笔记(十三)—— 101六轴传感器
    Arduino101学习笔记(十二)—— 101定时器中断
    Arduino101学习笔记(十一)—— 蓝牙BLE
    Arduino101学习笔记(十)—— 串口通信
    Arduino101学习笔记(九)—— 中断函数
    Arduino101学习笔记(八)—— 函数库
    Arduino101学习笔记(七)—— 时间API
    [mount]linux 挂载时 mount: wrong fs type, bad option, bad superblock on /dev/sdb
    [sed]字符串替换
    [net]netcat 做网络端口监听
  • 原文地址:https://www.cnblogs.com/smqh/p/4241121.html
Copyright © 2020-2023  润新知