C语言结构类型

231 阅读2分钟

结构类型:
结构的创建

struct date
{
    int year;
    int month;
    int day;
}p1,p2;
int main()
{
  struct date date1;
}

结构的初始化:

struct date
{
    int year;
    int month;
    int day;
}p1,p2;

int main()
{
    struct date date1 = { 2,6,8 };//顺序给结构里面的变量赋值
    struct date date2 = { .year = 7,.day = 0 };//直接给某个值赋值,没有初始化自动为0
    return 0;
}

结构指针:

{
    struct date date1 = { 2,6,8 };
    struct date* p = &date1;//必须使用&运算符,结构的名字并不是地址
    return 0;
}

给结构体赋值,无法通过直接写GET函数来进行赋值

#include<stdlib.h>
#include<string.h>
struct date
{
    int year;
    int month;
    int day;
};

struct date getstruct()
{
    struct date p;
    scanf("%d", &p.year);
    scanf("%d", &p.month);
    scanf("%d", &p.day);
    printf("%d %d %d\n", p.year, p.month, p.day);
    return p;
}

void output(struct date p)
{
    printf("%d %d %d", p.year, p.month, p.day);
}
int main()
{
    struct date date1 = { 0,0,0};
    date1 = getstruct();//通过函数返回值的方法来赋值
    output(date1);
    return 0;
}

指向结构的指针 (关于函数返回类型是指针的相关补充) QQ截图20211020234542.png

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date
{
    int year;
    int month;
    int day;
};

struct date* get(struct date *p)
{
    scanf("%d", &p->year);
    scanf("%d", &p->month);
    scanf("%d", &p->day);
    return p;
}

void output(struct date p)
{
    printf("%d %d &d", p.ear, p.month, p.day);
}
int main()
{
    struct date date1 = { 0,0,0};
    struct date* p = &date1;
    p->day;//直接指向结构变量中成员
    get(&p);
    output(*get(&p));//利用取值号*来将get()函数返回的结构体指针里的变量取出

    return 0;
}

结构数组:

struct date Date[100] = { {2,5,7},{2,9,0} };

结构体中嵌套结构体:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date
{
    int year;
    int month;
    int day;
};
struct conpany
{
    struct date x;
    struct date y;
};
int main()
{
    struct conpany a, * b;
    b = &a;
   /* 此时如下四种形式相等
    a.x.year
    b->x.year
    (a.x).year
    (b->x).year
    但是没有b->x->year,因为x不是指针,不能用->*/
    struct conpany math[] = { {{2,7,7},{5,8,0}},{{6,9,0},{5,7,8}}};//含有嵌套结构体的结构体数组
    return 0;
}

自定义数据类型:typedef 声明一个已有数据类型的别名

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
    int year;
    int month;
    int day;
}DATE;//简化名字,把一个结构体命名为DATE,简化了struct的书写
typedef int good;//将int给与一个good的别名
int main()
{
    DATE a = { 7,8,9 };
    good b = 8;
    return 0;
}