struct用法(C语言)

目录

定义:

定义形式:

结构体数据赋值方法:

使用typedef定义结构体:


定义:

struct即结构体,亦被直接称为“结构”。实际编程时,经常需要用相关的不同类型的数据来描述一个数据对象。例如,描述学生的综合信息时,需要使用学生的学号、姓名、性别、成绩以及家庭住址等不同类型的数据。但是,用相关的不同类型的数据来描述一个数据对象会使编程极为不便。因此,C语言提供了一种称为结构体(struct)的数据类型,以描述需要不同类型数据的数据对象。(摘自百度百科)

定义形式:

据我试验,结构体有3种定义方法(在不考虑使用typedef的情况下):

①:struct         [结构体名]        

{

[成员1数据类型]         [成员1名称];

[成员2数据类型]         [成员2名称];

[...]

}  ;

②:struct    

{

[成员1数据类型]         [成员1名称];

[成员2数据类型]         [成员2名称];

[...]

}    [结构体变量名标识符(类似int a;中的a是一个标识符)];

③:struct         [结构体名]        

{

[成员1数据类型]         [成员1名称];

[成员2数据类型]         [成员2名称];

[...]

}    [ 结构体变量名标识符(类似int a;中的a是一个标识符)];

那么,这几种有什么区别呢?

①是只定义了一个名字为[结构体名]的结构体类型,我们可以通过struct [结构体名]  [标识符]

的形式在需要的地方定义一个这种数据类型的变量。

②是只定义了一个这种结构体类型的数据,如果我们用这种方式的话,我们就只能在这里定义这种数据类型的变量。

③则是①和②的结合体。

我们通过一段代码来认识它们:

#include <stdio.h>

struct stu1
{
    char name[10];
    int age;
};

struct
{
    char name[10];
    int age;
}stu2x={"李四",22};

struct stu3
{
    char name[10];
    int age;
}stu3x;

struct stus
{
    struct stu3 sstu3x;
}stusx;

int main()
{

    struct stu1 stu1x={"张三",21};
    struct stu3 stu3y={"赵六",24};

    //   stu2x={"李四",22};
    stu3x.age=23;
    strcpy(stu3x.name,"王五");    //字符串赋值的一种方法,因为无法直接等于
    stusx.sstu3x.age=3000;
    strcpy(stusx.sstu3x.name,"七七");
    printf("姓名:%s 年龄:%d\n",stu1x.name,stu1x.age);
    printf("姓名:%s 年龄:%d\n",stu2x.name,stu2x.age);
    printf("姓名:%s 年龄:%d\n",stu3x.name,stu3x.age);
    printf("姓名:%s 年龄:%d\n",stu3y.name,stu3y.age);
    printf("姓名:%s 年龄:%d\n",stusx.sstu3x.name,stusx.sstu3x.age);
    printf("%d %d %d\n",sizeof(stu1x),sizeof(stu2x),sizeof(stu3x));

    return 0;
}

    那么,我们实际上用那种呢?其实我们这三种都不用,因为我们还有一个关键字(typedef)可以用,在typedef一节会讲到。

结构体数据赋值方法:

①:定义时赋值,就是在定义变量后,直接用={[成员1数据],[成员2数据],...};

这种赋值方法只适用于定义时,定义后这样赋值就会报错。

②:通过[结构体变量名标识符(类似int a;中的a是一个标识符)]. [成员n名称]=[成员n数据],这种方法也有一个缺陷,就是字符串无法直接赋值,需要使用strcpy之类的函数。最后就是当结构体中的成员也是结构体时,我们直接.下去套娃即可,上面的代码均可体现。

使用typedef定义结构体:

typedef是将定义复杂的声明定义成简单的别名,便于记忆和再次定义变量时使用。

在结构体中就是将定义的结构体类型用一个新的别名代替。

它也有有两种:

①:typedef struct    

{

[成员1数据类型]         [成员1名称];

[成员2数据类型]         [成员2名称];

[...]

}    [别名];

②:typedef  struct         [结构体名]        

{

[成员1数据类型]         [成员1名称];

[成员2数据类型]         [成员2名称];

[...]

}    [别名];

它们与结构体定义的②和③相似,区别是在最前面加了typedef,后面的 [结构体变量名标识符(类似int a;中的a是一个标识符)]换成了[别名],然后就是后面不能定义变量。

这个也很好理解:先看一段语句:typedef unsigned int uint32_t;

这段语句中unsigned int就相当于typedef  struct         [结构体名],uint32_tt就相当于[别名],至于这(typedef unsigned int uint32_t)后面不能定义变量应该都知道吧。

同时,typedef定义结构体①和②的区别也就一目了然了,就是②可以用struct [结构体名] 的形式去定义结构体变量,但是我都用typedef了,还需要这个?,所以用第一种就行。

最后也给出一段代码:

#include <stdio.h>
typedef  struct stut1
{
    char name[10];
    int age;
}stut1x;

typedef  struct
{
    char name[10];
    int age;
}stut2x ;

int main()
{
     struct stut1 stut1xx={"张三",21};
     stut1x stut1xy={"李四",22};
     stut2x stut2xy={"王五",23};
     printf("姓名:%s 年龄:%d\n",stut1xx.name,stut1xx.age);
     printf("姓名:%s 年龄:%d\n",stut1xy.name,stut1xy.age);
     printf("姓名:%s 年龄:%d\n",stut2xy.name,stut2xy.age);

    return 0;
}

  • 9
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值