C语言-结构体-详细介绍附有代码讲解

结构体:允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体.

说白了就是你按照自己的想法在一个单元里添加几种不同的类型,

结构体的定义:

例如

struct student  //这里的student是类型名,就是相当于你下边的 int float char 一样
{
    int num;
    char name[20];
    int age;
    float score;
    char addr[30];
}STU;  //STU则是称之为结构体的变量名 ,比如上边的 num name score                     //只有定义类型,系统才可以分配内存单元

结构体的使用:

既然我们已经定义好了一个结构体,那怎么去使用这个结构体呢

例如:结构体变量名.成员名

struct point //point 是结构标记,用于结构命名-类型名
{
	int a=3;
	int b=5;
}OUT; //OUT是变量名,


在main函数中
printf("%d",OUT.a);

 结构体的初始化:

//在结构体中进行初始化
struct student
{
    long int num;
    char name[20];
    char sex;
    char addr[30];
}a = {89031, "Li Lin", 'M', "123 Beijing Road"};

//但是这个的结构体的末尾不一样了,外部来进行初始化。
。。。。。。
。。。。。。
   char sex;
    char addr[30];
};
struct student a = {{10101, "Li Lin", 'M', 18},

//main函数中来进行初始化
void main()
{
    struct student a;
    stu.num = 12345;
    strcpy(stu.name, "Li Li"); //字符串不能直接输入,最好运用这个库函数
    stu.score[0] = 67.5; //数组的话添加数组的下标
    stu.score[1] = 89;
    stu.score[2] = 78.6;
}

结构体数组-数组的初始化 

 //对于结构体数组的初始化,数组在外
struct student
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;

};
struct student stu[3];
//对于结构体数组的初始化,数组在里边
struct student
{
    int num;
    char sex; 
}stu[3] = { {1,'A'},{2,'B'},{3,'C'} };

这个是能正常运行的 

 

**指向结构体数组的指针(数据结构用) 

#include <string.h>
#include <stdio.h>
#include <stdlib.b>
 
struct student
{
    long num;
    char name[20];
    char sex;
    float score;
};
 
void main()
{
    struct student stu_1;
    struct student *p;  //定义一个相同类型的指针,*同类型*
    p = &stu_1;
    stu_1.num = 89101;
    strcpy(stu_1.name, "Li Lin");
    stu_1.sex = 'M';
    stu_1.score = 89.5;
    printf("NO. :%ld\nname: %s\nsex:%c\nscore:%f\n", stu_1.num, stu_1.name, stu_1.sex, stu_1.score);
    printf("NO. :%ld\nname: %s\nsex:%c\nscore:%f\n", (*p).num, (*p).name, (*p).sex, (*p).score);
//对于指针其实可以换个方式
(*p).score 等价于 p->score
  
}

其实这里又回归了指针的定义

int a = 5;

int *p;   //指针就是专门指向地址的

p=&a;//利用指针指向a的地址

*p其实就等价于a

 

随后扩展的就是指向数组的指针 

struct student *p;
    for(p=stu; p<stu+3;p++) //这个就完全是使用指针元素来进行了,后边的那个stu+3 是说明数组为3
        printf("%5d %-20s %2c %4d\n", p->num, p->name, p->sex, p->age);

 指针 函数 结构体的三个结合部分

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define FORMAT "%d\n%s\n%f\n%f\n%f\n"

struct student
{
    int num;
    char name[20];
    float score[3];
};
void print(struct student stu)  //同样在这个函数中也是来一样的类型的
{
    printf("%d\n%s\n%f\n%f\n%f\n", stu.num, stu.score[0], stu.score[1], stu.score[2]);
    printf("\n");
}
void main()
{
    struct student stu;
    stu.num = 12345;
    strcpy(stu.name, "Li Li");
    stu.score[0] = 67.5;
    stu.score[1] = 89;
    stu.score[2] = 78.6;
    print(stu);  //调用一个函数
} 

其实更多是针对于复习

文章摘录来自:C 结构体 | 菜鸟教程

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i-阿松!

请给我一毛钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值