C语言结构简介

时间:2022-10-29 10:34:21

本文主要介绍以下内容:

  1. 关键字:struct
  2. 什么是C结构,如何创建结构模板,和结构变量
  3. 运算符. ,- >
  4. 如何访问结构的成员
  5. typedef简介
  • 结构的引出:在C语言中有int,double,char,等数据类型,如果需要一组相同的数据来描述一个变量时可以使用数组。 但是这常常不能满足需求,如人是一个变量的话,需要名字,(字符串),年龄(整型),身高(浮点数)等数据来描述。这个时候就不能使用数组了,这就引出了结构,也就是说结构类似于数组,但是其中的变量可以不相同!结构有数组结构,有字符串结构,还有指向结构的指针…,所以结构十分地灵活多变。

  • **struct:**struct关键字用来声明或建立一个结构变量如:

    struct fruit{
    结构成员;
    结构成员;
    ..............;
    .......;
    ....;
    };//声明了一个名为fruit的结构类型,结构声明结束需要以分号结尾!!!
    struct fruit apple = {
    结构成员,
    结构成员,
    .............,
    ........,
    ...,
    };//建立一个结构类型为fruit名为apple的结构变量
    
  • 结构成员的访问:结构变量使用.运算符访问成员,而指向一个结构的指针需要使用->
    举个栗子O(∩_∩)O哈哈~首先我建立一个结构数组,和一个指向结构指针。先使用.运算符访问结构成员,再使用->运算符访问结构成员。具体使用如下:

    #include <stdio.h>
    #include <stdlib.h>
    # define NUM 2//预处理
    # define NAME 20
    struct people {
        char name[NAME];
        int old;
        float height;
    };//声明一个为people的结构,用分号表示结束
    int main(void)
    {
        int i;
        //struct people guy[NUM];
        struct people guy[NUM] = {
        {
            "xiaojiang",
            10,
            120.5,
        },
        {
            "SmallRivers",
            20,
            172.5,
        }
        };//定义一个为名为guy[NUM]的数组其中有两个people结构类型的变量,并为其赋值
        struct people *p;//把p声明为一个指向people结构类型的指针
        p = & guy[0];//指针指向guy[0]
        for (i = 0; i <= NUM; i++)
        printf("guy[%d].name[NAME] = %s\n", i, guy[i].name[NAME]);
        printf("guy[%d].old = %d\n", i, guy[i].old);
        printf("guy[%d].height = %f\n", i, guy[i].height);
        //使用.符号访问结构成员的值
        printf("p->name[NAME] = %s\n", p->name[NAME]);
        printf("p->old = %d\n", p->old);
        printf("p->height = %f\n", p->height);
        //p为指针所以不能使用.访问结构成员应该使用符号->
        p++;//指针指向下一个结构guy[1]
        printf("p->name[NAME] = %s\n", p->name[NAME]);
        printf("p->old = %d\n", p->old);
        printf("p->height = %f\n", p->height);
        //使用->访问结构成员
        //所以guy[1].old = p->old = (*p).old
        //printf("Hello world!\n");
        return 0;
    }
    

4. typedef: typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称,这方面与#define类似但是也有几处不同

  • typedef有编译器解释,#define有预处理器解释
  • #与define,typedef创建的符号只受限与类型,不能用于值的定义

typedef使用如下:

typedef long double lb;

然后使用lb来定义一个long double 类型的变量:

lb num1, num2;

这样似乎看来给一个类型定义一个别名似乎完全多此一举。但是在定义一些比较复杂的类型的时候却十分有用:

typedef char (*function())[10];

首先把function()声明为一个函数,该函数返回一个指针,该指针指向含有10个char类型的数组
还可以typedef用于结构:

typedef struct fruit{
char name[10];
float price;
} FRUIT;

接下来就可以使用FRUIT来建立一个结构了
另外用typedef来建立一个结构时可以省略结构的标签如下:

typedef struct{
char name[10];
float price;
} FRUIT;

这样定义与上面完全一样
结构FRUIT使用方法如下与原来完全相同:

struct FRUIT Apple{
name[10] = apple,
price = 5.00
};