C语言结构体知识点记录

2018-09-09  本文已影响0人  超级皮波9

一.结构体

  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;
}

六 .结构体和指针

#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;
}
上一篇下一篇

猜你喜欢

热点阅读