美文网首页
C语言结构体知识点记录

C语言结构体知识点记录

作者: 超级皮波9 | 来源:发表于2018-09-09 14:23 被阅读0次

一.结构体

  1. 概念
  • 结构体是构造类型的一种
  • 构造类型前面还有数组
  • 数组的作用是用于储存一组相同类型的数据
  • 结构体的作用是用于储存一组不同类型的数据
  1. 如何定义
  • 先定义结构体的类型
  • 通过结构体的类型定义结构体的变量
**定义结构体的类型**
//格式
struct  结构体类型名称{
        数据类型  属性名称 ;
        数据类型  属性名称 ;
        };
//例子 定义结构体Person
struct  Person {
        char *name;
        int  age;
        double height;
        };  //分号注意一定要写

**定义结构体的变量**
//格式
struct 结构体类型名称  变量名称;
//例子 定义结构体变量 P
struct Person  p;

**使用结构体变量**
//格式
结构体变量 . 结构体属性名称
//例子
p.name = "小明";
p.age = 10;
p.height = 1.8;

二 . 结构体变量的初始化

  1. 定义的同时初始化
  • 注意: 如果定义的同时初始化,那么初始化的顺序必须和结构体类型中的顺序一致
#include <stdio.h>
int main(){
    //定义结构体
    struct Person{
        char name;
        int age;
        int money;
    };
    //定义结构体变量同时初始化
    struct Person p = {"jack",22,1000};    
    return 0;
}
  1. 先定义再初始化
#include <stdio.h>
int main(){
    //定义结构体
    struct Person{
        char name;
        int age;
        int money;
    };
    //定义结构体变量 先定义再初始化
    struct Person p;
    p.name = "jack";
    p.age = 22;
    p.money = 100000;
   
    return 0;
}

三.定义结构体变量的方式

  1. 先定义结构体类型,在定义结构体变量
#include <stdio.h>

int main(){
    
    //定义结构体
    struct Person{
        char name;
        int age;
        int money;
    };
    //定义结构体变量
    struct Person p;
    
    return 0;
}
  1. 定义结构体类型的同时定义结构体变量
#include <stdio.h>

int main(){

    //定义结构体
    struct Person{
        char name;
        int age;
        int money;
    } p; //结构体变量p

    return 0;
}
  1. 定义结构体类型的同时省略结构体名称,同时定义结构体变量
  • 为匿名结构体 特点 : 结构体类型只能使用一次
#include <stdio.h>

int main(){

    //定义结构体 
    struct {
        char name;
        int age;
        int money;
    } p; //结构体变量p

    return 0;
}

4 . 结构体类型的作用域

  • 作用域和变量的作用域一样

5 . 结构体内存分析

注意点

  1. 给整个结构体变量分配储存空间和数组一样,从内存地址比较大的开始分配
  2. 给结构体变量中的属性分配储存空间也和数组一样,从所占内存地址比较小的开始分配
  3. 定义结构体类型不会分配储存空间,只有定义结构体变量的时候才会分配储存空间
  • 结构体在分配内存的时候,会做一个内存对齐的操作
  • 会先获取所有属性中占用内存最大的属性的字节数
  • 然后在开辟出最大属性字节的内存给第一个属性,如果分配给第一个属性之后还能继续分配给第二个属性,那么就继续分配给第二个属性
  • 如果分配给第一个属性之后,剩余的内存不够分配给第二个属性了,那么会再次开辟最大属性的内存,再次分配 依次类推
#include <stdio.h>

int main(){

    //定义结构体
    struct Person {
        char name; // 1 个节点  //开辟4个字节 char 占用1个
        int age;  // 4个字节   // 剩余三个 不够int  再开辟4个字节
        int money; // 4个字节 // 再开辟4个字节
    };

    struct Person p; // 所以p = 4+4+4

    printf("sizeof(p) = %i\n",sizeof(p)); // 12个字节
    return 0;
}

六 .结构体和指针

  • 结构体指针
    因为结构体变量也会分配内存空间,所以结构体变量也有内存地址,所以可以使用指针保存结构体变量的地址

  • 规律
    定义结构体变量的指针的方法和定义普通变量的方法一样
    如果指针指向了结构体变量,那么访问结构体变量的方法就有三中
    1.结构体变量.属性名称
    2.(*结构体指针变量名称).属性名称
    3.结构体指针变量名称->属性名称

#include <stdio.h>

int main(){

    //定义结构体
    struct Person {
        char *name;
        int age;
        int money;
    };

    struct Person per = {"小明",22,100};

    struct Person *p = &per;

    printf("per.name = %s\n",per.name);  // 1. per.name = 小明
    printf("(*p).name = %s\n",(*p).name);  // 2. (*p).name = 小明
    printf("p->name = %s\n",p->name); //3. p->name =小明
    return 0;
}

七 . 结构体嵌套定义

  • 结构体的属性可以又是一个结构体 , 提高代码的复用性
#include <stdio.h>

int main(){

    //定义一个日期的结构体
    struct Date{
        int year;
        int month;
        int day;
    };
    //定义人的结构体
    struct Person{
        char *name;
        int age;
        struct Date birthday; // 嵌套定义日期的结构日
    };

    struct Person p = {"小明",22,{2018,9,9}}; // 初始化
    return 0;
}

相关文章

  • C语言结构体知识点记录

    一.结构体 概念 结构体是构造类型的一种 构造类型前面还有数组 数组的作用是用于储存一组相同类型的数据 结构体的作...

  • C语言和OC的结构体(struct)

    Struct(结构体) 1.结构体定义 2.结构体变量 3.结构体数组 4.C语言结构体指针 5.C语言共用体 6...

  • C语言结构体用法很多,坑也很多

    C语言可谓是编程界的传奇语言,历经几 十 年,依然排名前列。 本文主要说的是C语言中的结构体,结构体是C语言中重要...

  • C语言结构体

    结构体 本文介绍C语言结构体,struct 在C++中功能相对C较多,相当于类,这里暂时不讨论,本文单独讨论C语言...

  • 嵌入式学习笔记19.11.25

    c语言结构体 结构体一般定义全局变量 struct stu{//struct 定义结构体 stu 结构体名称 in...

  • 12-Go语言结构体

    结构体 结构体的基本概念 什么是结构体Go语言中的结构体几乎和C语言中的结构体一模一样都需要先定义结构体类型, 再...

  • [iOS]开发技术相关技术教学视频(Swift系列视频语法部分)

    知识点系列视频 C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(...

  • C语言学习笔记-结构体占用内存大小的计算

    引言 结构体在C语言中虽然经常使用,但是怎么计算一个结构体占用多大的内存,很多C语言的新手都没注意过,其实C语言的...

  • 结构体与指针

    1.1 Linux C语言结构体 简介:本课程深入的讲解了C语言中,预处理是怎么回事,结构体和公用体又是如何使用及...

  • c语言中的结构体

    结构体是 C 语言主要的自定义类型方案,这篇就来认识一下结构体。 一、结构体的形态 C源程序(struct.c):...

网友评论

      本文标题:C语言结构体知识点记录

      本文链接:https://www.haomeiwen.com/subject/qhnrgftx.html