【手撕C语言基础】结构体

  • (꒪ꇴ꒪ ),hello我是祐言
  • 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
  • 快上🚘,一起学习!
  • 送给读者的一句鸡汤🤔:
  • 集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

        当谈到C语言中的数据结构时,结构体(struct)是一个非常重要的概念。结构体允许我们将多个不同类型的数据组合在一起,并且可以自定义的方式进行访问和操作。本文将从结构体定义、结构体赋值、结构体数组和结构体指针四个方面介绍结构体在C语言中的使用方法和技巧。

一、结构体定义

        在C语言中,结构体是一种用户自定义的数据类型,可以将多个不同类型的数据组合在一起。结构体的定义通常放在函数外部,以便于全局使用。下面是一个结构体的定义示例:

#include <stdio.h>

struct student {
    char name[20];
    int age;
    float score;
};

        在上面的示例中,我们定义了一个名为 student 的结构体,它包含了名字(字符串类型)、年龄(整数类型)和分数(浮点数类型)三个成员。

二、结构体赋值

        结构体变量可以通过赋值操作来存储数据。可以使用赋值运算= 将一个结构体的值赋给另一个结构体变量,也可以逐个成员地对结构体进行赋值。

       下面是一个结构体赋值示例:

#include <stdio.h>
#include <string.h>

struct student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct student s1;
    strcpy(s1.name, "Tom");
    s1.age = 18;
    s1.score = 90.5;

    printf("Name: %s\n", s1.name);
    printf("Age: %d\n", s1.age);
    printf("Score: %.2f\n", s1.score);

    return 0;
}

        在上面的示例中,我们首先定义了一个名为 s1 的结构体变量,并通过 strcpy 函数给name成员赋值,然后直接通过赋值语句给 age  score 成员赋值。最后,我们使用 printf 函数将结构体成员的值输出到屏幕上。

        上述的方法呢是最简单的顺序赋值,当你需要添加一个成员进去时,就会打乱所有顺序,因此我们还需掌握另一种赋值法 指定成员赋值:指定成员赋值是一种在C语言中为结构体成员指定具体数值的方法。通过指定成员赋值,我们可以有选择地对结构体的特定成员进行赋值,而不必按照结构体成员的定义顺序来逐个赋值。

struct 结构体名 变量名 = {成员1数值, 成员2数值, ...};

        其中,成员1数值成员2数值等表示要为相应成员赋的具体值。值的顺序必须与结构体定义中成员的顺序一致,或者可以通过成员名进行指定。下面是一个示例:

#include <stdio.h>

struct student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct student s = {.name = "Tom", .score = 90.5, .age = 18};

    printf("Name: %s\n", s.name);
    printf("Age: %d\n", s.age);
    printf("Score: %.2f\n", s.score);

    return 0;
}

        在上面的示例中,我们使用了指定成员赋值的方式创建了一个名为 s 的 student 结构体变量。通过在花括号内按成员名 = 数值的形式指定成员的赋值顺序,可以不必按照结构体定义中成员的顺序来赋值。在该示例中,我们先指定了 name 成员的赋值,然后是 score   age

三、结构体数组

        结构体数组是多个结构体的集合,可以按照数组的方式进行访问和操作。下面是一个结构体数组的示例:

#include <stdio.h>

struct student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct student s[3] = {
        {"Tom", 18, 90.5},
        {"Jerry", 20, 85.0},
        {"Alice", 19, 95.5}
    };

    for (int i = 0; i < 3; i++) {
        printf("Name: %s\n", s[i].name);
        printf("Age: %d\n", s[i].age);
        printf("Score: %.2f\n", s[i].score);
        printf("\n");
    }

    return 0;
}

        在上面的示例中,我们定义了一个包含3个元素的结构体数组s,每个元素都是一个 student 结构体。通过使用花括号“{ }”和逗号 “,”的方式,我们给每个结构体的成员变量赋值。然后,使用 for 循环遍历结构体数组,并将每个结构体的成员输出到屏幕上。

四、结构体指针

        结构体指针允许我们通过指针对结构体进行访问和操作,这对于动态分配内存和传递结构体参数非常有用。下面是一个结构体指针的示例:

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

struct student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct student *s1 = (struct student *)malloc(sizeof(struct student));
    strcpy(s1->name, "Tom");
    s1->age = 18;
    s1->score = 90.5;

    printf("Name: %s\n", s1->name);
    printf("Age: %d\n", s1->age);
    printf("Score: %.2f\n", s1->score);

    free(s1);

    return 0;
}

        在上面的示例中,我们首先使用 malloc 函数动态分配了一个结构体大小的内存空间,并将其赋值给s1指针。然后,通过指针操作符->来给结构体成员赋值和访问。最后,我们使用 free 函数释放了动态分配的内存空间。

综合例程

        下面是一个综合程序的运行结果与代码,里面涉及到上述的所有知识点。

        

#include <stdio.h>
#include <string.h>  
#include <stdlib.h>  //一定注意头文件!!!需要的都要加!


struct student 
{
	char name[20];
	short int age;
	int number;
	
	
};


int main(void)
{
	int a = 1;
	struct student zhang ={.name = "ZHANGSAN",.age = 23,.number = 7164101};
	struct student li ={.name = "LISI",.age = 23,.number = 7164101};
	
	printf("a = %d\n", a);
	printf("%s, %hd, %d\n", zhang.name, zhang.age, zhang.number);
	printf("%s, %hd, %d\n", li.name, li.age, li.number);	
		
	
	printf("-------修改值-------\n");
	stpcpy(zhang.name,"ZhangSan");
	zhang.age = 20;
	zhang.number = 7164111;
	
	printf("%s, %hd, %d\n", zhang.name, zhang.age, zhang.number);
	
	
	
	printf("--------------------\n");
	
	struct student su;
	stpcpy(su.name,"SYJ");
	su.age = 22;
	su.number = 7164109;
	printf("%s, %hd, %d\n", su.name, su.age, su.number);
	
	printf("-----结构体数组------\n");
	struct student c2305[50] = {{.name = "lhx",.age = 22,.number = 100},{.name = "syj",.age = 23,.number = 101}};
	stpcpy(c2305[2].name,"yqh");
	c2305[2].age = 23;
	c2305[2].number = 102;
	
	for (int i = 0;i <3;i++){
		printf("%s, %hd, %d\n", c2305[i].name, c2305[i].age, c2305[i].number);
		
	}
	
	printf("-----结构体指针------\n");
	struct student *psu = malloc( sizeof(struct student) );
	stpcpy(psu->name,"Susu");
	psu->age = 23;
	psu->number = 7164119;
	printf("%s, %hd, %d\n", psu->name, psu->age, psu->number);
	
}

        希望本篇博客对您理解和应用结构体有所帮助。如果您对其他C语言相关的内容感兴趣,欢迎继续阅读我的其他博客~

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

祐言QAQ

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值