//结构体

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//结构体是一种构造数据类型,用途把不同的数据组合成一个整体
//结构体变量数据大,作为参数的时候一般会使用结构体指针传参


//结构体类型不分配内存,不能赋值,存取,运算
struct nameinfo{
    int num;
    char name[40];
}d1,d2[9],*d3;//结构体的定义①

//匿名结构体,用于限制该结构体的数量,只给某些有权限的使用
struct {
    int snum;
    char sname[40];
}sd1;//匿名结构体,必须在定义的时候就创建变量,其他条件下无法创建

struct mao{
    char ch;
    int a[10];
};

struct gou{
    int num;
    char name[10];
};

struct lang{
    int num;
    double longnum;
    char name[10];
};

void main9(){
    //结构体的定义②
    struct nameinfo info;
    //结构体赋值
    info.num = 1;
    strcpy(info.name, "小米");//数组不可以直接赋值
    printf("结构体的成员变量num=%d,name=%s\n", info.num, info.name);
    //结构体赋值②
    struct nameinfo d4 = { 2, "华为" };
    //注意:结构体变量用大括号赋值,只有在创建并初始化的时候才可以
    //d1 = { 2, "华为" };  错误 不可如此赋值


    //结构体指针
    struct nameinfo *p = NULL;
    //结构体指针的初始化①
    p = &info;
    p->num = 2;//结构体指针的赋值
    strcpy((*p).name, "雷云");
    printf("结构体的成员变量num=%d,name=%s\n", (*p).num, p->name);
    //结构体指针的初始化②
    struct nameinfo *p1 = NULL;
    p1 = (struct nameinfo *)malloc(sizeof(struct nameinfo));
    p1->num = 3;
    strcpy((*p1).name, "马化腾");
    printf("结构体的成员变量num=%d,name=%s\n", (*p1).num, p1->name);


    //结构体字节对齐原则--见C语言 结构体(联合体)对齐规则
  
    printf("结构体mao的大小是%d\n", sizeof(struct mao));
    printf("结构体gou的大小是%d\n", sizeof(struct gou));
    printf("结构体lang的大小是%d\n", sizeof(struct lang));


    system("pause");
}

C语言 结构体_#include