C语言结构体

人生的胜者决不会在挫折面前失去勇气。

定义

关键字:struct

语法1(推荐)

struct        结构体名称

{

        成员:一个结构体可以有多个成员

};

语法2:定义结构体的时候顺便定义一个结构体变量

struct        结构体名称

{

        成员:一个结构体可以有多个成员

}变量名;

语法3:一个结构体只定义一个结构体变量

struct

{

        成员:一个结构体中可以有多个成员

}变量名;

 初始化结构体

方式1

语法

        struct 结构体名称 结构体变量名  =  {值1,值2,值三3...}

注意

1.定义结构体变量与初始化不能分开

2.值的顺序就是结构体中成员的顺序

示例

 方式2

语法

结构体变量名1 = 结构体变量名2;

方式3

语法

memcpy(结构体变量名1的地址,结构体变量名2的地址,长度)

 方式4

示例

struct ppp
{
    char name[50];
    int age;
    char jiax[20];
};
void fun01()
{
    //方式1
    struct ppp p1 = {"张三",18,"兰州" };
    
    //方式2
    struct ppp p2;
    scanf("%s %d %s",p2.name,&p2.age,p2.jiax);
    
    //方式3
    struct  ppp p3;
    strcpy(p3.name,"王五");
    p3.age = 23;
    strcpy(p3.jiax,"重庆");

    printf("%s %d %s\n",p1.name,p1.age,p1.jiax);
    printf("%s %d %s\n",p2.name,p2.age,p2.jiax);
    printf("%s %d %s\n",p3.name,p3.age,p3.jiax);
}

 结构体成员使用

取值

结构体变量名.成员名

赋值

基本数据类型

        结构体变量名.成员名 = 值;

字符数组

        strcpy(结构体变量名.成员名,值);

typedef与结构体

作用:简化定义结构体变量

语法

typedef  struct 结构体名称

{

        成员

}别名;

示例

typedef struct ppp
{
    char name[50];
    int age;
}p;
void fun01()
{
    p p1 = {"张三",18};
    p p2;
    strcpy(p2.name,"李四");
    p2.age = 20;
    printf("%s %d\n",p1.name,p1.age);
    printf("%s %d\n",p2.name,p2.age);
}

结构体嵌套

概念:结构体A成员是结构体B的变量

结构体与指针

结构体指针

概念:指向结构体变量的指针

定义语法

struct  结构体名称  *指针变量名;

别名  *指针变量名;

操作成员

将.换为->即可

示例

typedef struct ppp
{
    char name[50];
    int age;
}P;
void fun01()
{
    P x = {"张三",20};
    struct ppp *x1 = &x;
    P *x2 = &x;

    x.age = 25;
    printf("%d\n",x.age);
    x1->age = 30;
    printf("%d\n",x1->age);

    strcpy(x.name,"李四");
    printf("%s\n",x.name);

    strcpy(x1->name,"王五");
    printf("%s\n",x2->name);
}

示例2:堆区开辟内存存储 结构体变量

void fun01()
{
    P *p1 = (P *)calloc(1,sizeof(P));
    if (p1 == NULL)
    {
        printf("开辟失败");
        return;
    }
    memset(p1,0,sizeof(P));
    strcpy(p1->name,"张三");
    p1->age = 20;
    printf("%s %d\n",p1->name,p1->age);
    if (p1 != NULL)
    {
        free(p1);
        p1 =NULL;
    }
    
}
void fun02()
{
    P *p1 = (P *)calloc(1,sizeof(P));
    if (p1 == NULL)
    {
        printf("开辟失败");
        return;
    }
    memset(p1,0,sizeof(P));
    scanf("%s %d",p1->name,&p1->age);
    printf("%s %d\n",p1->name,p1->age);
    if (p1 != NULL)
    {
        free(p1);
        p1 =NULL;
    }
    
}
结构体中成员为指针变量

概念

结构体的成员指针变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值