C语言结构体?看了这个应该就行了^_^

结构体

可以把他看做一个数组,不过数组储存的是数据类型一样的,而结构体则可以储存各种数据类型包括结构体类型也就是结构体嵌套。

基本用法

声明

struct是声明结构体的关键字,加上结构体的名字:

struct boy
{
    int num;
    char name[100];
    char sex;
    int age;
    char addr[100];
};

这是声明一个名为boy的结构体,包括学号,姓名等等数据。声明后struct boy的作用就相当于int ,float一样。当然,也可以声明结构体数组。

声明结构体变量

有三种方式

struct boy student1;//声明后再声明变量,对比int
struct boy
{
    int num;
    char name[100];
    char sex;
    int age;
    char addr[100];
}student1;//声明的时候就声明变量
struct 
{
    int num;
    char name[100];
    char sex;
    int age;
    char addr[100];
}student1;//这种不常用,相当于只要了一个变量,他没有名字

结构体成员的初始化与赋值操作

用 . 运算符取结构体中的变量进行初始化

student1.num = 10086;
student1.name = 张三;
······

或者点名道姓赋值

student1 = {.num = 10086;.name = 张三};

或者根据顺序一一对应放数据(对比数组)

student1 = {10086, 张三······};

未初始化默认为零。

注意:相同结构的结构体可以直接用赋值运算符复制数据

struct boy student1,student2;
student1 = {.num = 10086;.name = 张三};
student2 = student1;//这样可以直接给student2赋student1的值

结构体数组

与一般数组一样,结构体数组是连续储存多个相同的结构体的数据结构

struct boy student[5];//这里定义了含有5个student的数组

结构体做函数参数

void myinput(struct boy student[]);//声明里面必须要加struct关键字和变量名,参考int 型
void mydisp(struct boy student[]);
void myinput(struct boy student[])
{
    int i;
    for(i=0;i<sum;i++)
    {
        printf("请输入第%d个学生信息:\n",i+1);
        printf("学号:");
        scanf("%d",&student[i].num);//结构体名不能代表地址,所以用取地址运算符
        printf("姓名:");
        scanf("%s",student[i].name);//然而这个name是一个数组,所以不用取地址运算符
        printf("性别:");
        scanf(" %c",&student[i].sex);
        printf("年龄:");
        scanf("%d",&student[i].age);
        printf("住址:");
        scanf("%s",student[i].addr);
    }
}
void mydisp(struct boy student[])
{
    int i;
    for(i=0;i<sum;i++)
    {
        printf("第%d个学生信息为:\n",i+1);
        printf("学号:%03d\t姓名:%s\t性别:%c\t年龄:%d\t住址:%s\n",student[i].num,student[i].name,student[i].sex,student[i].age,student[i].addr);
    }
}

结构体指针

指针无所不能,当然能指向结构体

struct boy *p;//定义指向boy结构体的指针
struct boy student;
p = &student;//给指针初始化

通过指针访问结构体数据有两种方法:
第一,解引用+点运算符

(*p).num = 10086;
...

第二,指针法—箭头运算符(自己取的名)

p->num = 10086;
...
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值