C结构体及结构体数组
  C

C结构体及结构体数组

 次点击
10 分钟阅读

结构体概述

结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义

通俗来讲,结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

结构体的定义

语法:

struct 结构体名
{
    结构体成员列表
};

结构体的使用

  • struct 结构体名 变量名

  • struct 结构体名 变量名 = {成员1值,成员2值……}

  • 定义结构体时顺便创建变量

#include <stdio.h>
#include <string.h>
 
//结构体的定义
struct book
{
    int num;
    char name[16];
    char author[16];
    char press[32];
    float price;
    //第三种方式:定义结构体时定义变量
}book4,book5 = {3,"小王子","王五","邮电出版社",34},book6 = {.num = 3,.price = 78};
int main(int argc, const char *argv[])
{
    //第一种方式:定义完结构体定义变量
    struct book book1;
    book1.num = 1;
    //结构体成员如果是数组,需要用以下方式赋值
    //book1.name[0] = 'w';
    //book1.name[1] = 'a';
    strcpy(book1.name, "C语言");
    //book1.name = "C语言";   错误行为,数组只有定义的时候才可以这样赋值
    strcpy(book1.author, "张三");
    strcpy(book1.press, "农业大学出版社");
    book1.price = 36.5;
 
    printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
            book1.num, book1.name, book1.author, book1.press, book1.price);
     
     
    //第二种方式,定义结构体变量时赋值
    struct book book2 = {2,"C语言","李四","邮电出版社",45.0};
    printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
            book2.num, book2.name, book2.author, book2.press, book2.price);
    //如果只给部分成员赋值,需要用以下方式
    struct book book3 = {
        .num = 2,
        .name = "C语言",
        .press = "邮电出版社",
        .price = 45.0,
    };
    printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
            book3.num, book3.name, book3.author, book3.press, book3.price);
 
    book4.num = 3;
    strcpy(book4.name, "C语言");
    strcpy(book4.author,"李四");
    strcpy(book4.press,"中信出版社");
    book4.price = 50;
    printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
            book4.num, book4.name, book4.author, book4.press, book4.price);
    printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
            book5.num, book5.name, book5.author, book5.press, book5.price);
    printf("num = %d, name = %s, author = %s, press = %s, price = %f\n ",\
            book6.num, book6.name, book6.author, book6.press, book6.price);
    return 0;
}

结构体数组

作用:将自定义的结构体放到数组中方便维护

语法:struct 结构体名 数组名[元素个数] = {{}, {}, …}

#include <stdio.h>
#include <string.h>
 
//结构体的定义
struct book
{
    int num;
    char name[16];
    char author[16];
    char press[32];
    float price;
}Book3[3];
 
int main(int argc, const char *argv[])
{
    int i;
    struct book Book[3] = {{1,"C语言", "张三", "邮电出版社",45},\
        {2,"C和指针", "李四", "邮电出版社", 34},\
        {3,"C陷阱","王五","农业出版社",67}};
 
    struct book Book2[5];
    Book2[0].num = 4;
    //Book2[0].name = "系统编程"; //错误行为
    //Book2[0].name[0] = 'x';
    //Book2[0].name[1] = 't';
    strcpy(Book2[0].name, "系统编程");
    strcpy(Book2[0].author, "周三");
    strcpy(Book2[0].press, "农业出版社");
    Book2[0].price = 45;
 
    for(i = 0; i < 3 ; i++)
    {
        printf("num = %d, name = %s, author = %s, press = %s, price = %f\n", \
                Book[i].num, Book[i].name, Book[i].author, Book[i].press, Book[i].price);
    }
        printf("num = %d, name = %s, author = %s, press = %s, price = %f\n", \
                Book2[0].num, Book2[0].name, Book2[0].author, Book2[0].press, Book2[0].price);
    return 0;
}

© 本文著作权归作者所有,未经许可不得转载使用。