结构体数组

结构体数组

结构体是一种集合,它里面包含多个变量和数组,他们类型形同,也可以不同,每个变量或数组都称为结构体成员

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};

结构体成员定义与变量相同,只是不能初始化,};不能少

结构体变量

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2;

将变量放在结构体定义的后面即可

当只需要stu1,stu2两个变量,后面不需要定义结构体的其他变量,也可以再定义时不给出结构体名,例如:

struct{  //没有写 stu
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2; 
因为没有结构体名,后面不能再定义新的变量

可以对成员逐一赋值,也可以在定义时整体赋值

struct{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };

整体赋值仅仅限于定义结构体变量的时候,在使用过程中只能对成员逐一赋值

结构体是一种自定义的数据 ,是创建变量的模板,不占用内存空间;结构体变量才是包含实实在在的数据,需要内存空间来存储

结构体指针

当一个指针变量指向结构体时,称为结构体指针

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在小组
    float score;  //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;

数组名在表达式中会被转化为数组指针,结构体变量不会,要想取得结构体变量的地址,必须前面加上&

获取结构体成员

一般有两种

(*pointer).memberName

或者

pointer->memberName

->是一个新的运算符,习惯称它为箭头,可以通过->直接获取结构体成员

但是要注意的是,只有“指针变量名”后面才能加“->”,千万不要在成员名后面加“->”。 综上所述,以下 3 种形式是等价的:

  • 结构体变量.成员名。

  • (*指针变量).成员名。

  • 指针变量->成员名。

#include 
int main(){
    struct{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
​
    //读取结构体成员的值
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
​
    return 0;
}

typedef,const,c语言随机数

使用关键字typedef可以为类型起一个新的别名

[c语言typedef的用法详解]

使用关键字typedef可以为类型起一个新的别名。typedef的用法一般为

typedef  oldName  newName;

typedef时赋予现有类型一个新的名字,而不是创建新的类型。尽量使用含义明确的标识符,并尽量大写。

你可能感兴趣的:(数据结构,c语言,p2p)