当前位置: 首页 > news >正文

结构体几种实用的用法

结构体的初始化

结构体的初始化是指在声明结构体变量时,为其成员变量赋初值。结构体的初始化可以通过以下几种方式实现:

1. 在声明结构体变量的同时进行初始化:

struct Student

{

char name[20];

int age;

float score;

} student = {"张三", 18, 90.5};

上面的代码定义了一个名为Student的结构体,并在声明结构体变量student的同时进行了初始化。将字符串"张三"、整数18和浮点数90.5分别赋给了name、age和score成员变量。

2. 先声明结构体变量,再进行初始化:

struct Student

{

char name[20];

int age;

float score;

};

struct Student student;

strcpy(student.name, "李四");

student.age = 20;

student.score = 86.0;

上面的代码首先定义了一个名为Student的结构体,然后声明了一个结构体变量student。接下来,我们使用strcpy函数将字符串"李四"复制到name成员变量中,并分别将整数20和浮点数86.0赋给age和score成员变量。

3. 通过指针进行初始化:

struct Student

{

char name[20];

int age;

float score;

};

struct Student *student = (struct Student *)malloc(sizeof(struct Student));

strcpy(student->name, "王五");

student->age = 22;

student->score = 98.5;

上面的代码首先定义了一个名为Student的结构体,然后使用malloc函数动态分配了一块内存空间来存储结构体变量。接下来,我们使用指针访问结构体的成员变量,并将字符串"王五"、整数22和浮点数98.5分别赋给了name、age和score成员变量。最后,记得释放动态分配的内存空间。

结构体指针作为函数返回值的类型

函数的返回类型是结构体指针类型,表示该函数返回一个指向结构体的指针。下面是一个示例代码,演示了如何定义一个返回结构体指针类型的函数:

#include <stdio.h>

// 定义一个结构体类型

typedef struct

{

int id;

char name[20];

} Student;

// 定义一个函数,返回一个指向Student结构体的指针

Student* get_student_info()

{

Student* student = (Student*)malloc(sizeof(Student)); // 动态分配内存空间

student->id = 1;

strcpy(student->name, "John");

return student; // 返回指向Student结构体的指针

}

int main()

{

Student *student_ptr = get_student_info(); // 调用函数获取指向Student结构体的指针

printf("ID: %d\n", student_ptr->id); // 输出学生信息

printf("Name:%s\n",student_ptr->name);

free(student_ptr); // 释放动态分配的内存空间

return 0;

}

在上述示例中,我们定义了一个名为Student的结构体类型,包含两个成员变量id和name。然后,我们定义了一个名为get_student_info的函数,该函数返回一个指向Student结构体的指针。在函数内部,我们使用malloc函数动态分配了一块内存空间来存储Student结构体的信息,并初始化了其成员变量。最后,我们通过返回指针的方式将指向Student结构体的指针传递给调用者。

在main函数中,我们调用了get_student_info函数并将返回的指针赋值给student_ptr变量。然后,我们可以使用student_ptr访问Student结构体的成员变量,并进行相应的操作。最后,我们使用free函数释放了动态分配的内存空间,以避免内存泄漏。

结构体指针作为函数的参数

结构指针作为函数的参数可以实现在函数内部修改结构体变量的值,并且这些修改在函数调用结束后仍然有效。这是因为结构指针作为参数传递的是结构体变量的地址,函数内部对结构体成员的操作实际上是直接修改了结构体变量的内容。

下面是一个示例代码,演示了结构指针作为函数参数的使用:

#include <stdio.h>

#include <string.h>

struct Student

{

char name[20];

int age;

float score;

};

void update_student_info(struct Student *s, const char *new_name, int new_age, float new_score)

{

strcpy(s->name, new_name);

s->age = new_age;

s->score = new_score;

}

 

int main()

{

struct Student student1 = {"张三", 18, 90.5};

printf("Before update: ");

printf("Name: %s, Age: %d, Score: %.2f

",student1.name,student1.age, student1.score);

update_student_info(&student1, "李四", 20, 88.0);

printf("After update: ");

printf("Name: %s, Age: %d, Score: %.2f

",student1.name,student1.age, student1.score);

return 0;

}

上面的代码定义了一个名为Student的结构体,包含三个成员:name(姓名)、age(年龄)和score(成绩)。然后,我们定义了一个名为update_student_info的函数,它接受一个指向Student结构体的指针作为参数,以及新的姓名、年龄和成绩。在函数内部,我们通过指针访问结构体的成员变量,并将新的值赋给这些成员变量。这样,我们就可以通过调用这个函数来修改结构体变量的值了。

在main函数中,我们声明了一个名为student1的结构体变量,并初始化了它的成员变量。然后,我们调用update_student_info函数,将student1的地址作为参数传递给它,同时传递新的姓名、年龄和成绩。在函数调用结束后,我们可以看到student1的成员变量已经被成功修改了。

 

 

http://www.lryc.cn/news/231560.html

相关文章:

  • React Native 源码分析(四)—— TurboModules JSI通信机制
  • 【C#学习】ToString() 格式化数值
  • install YAPI MongoDB
  • 大数据Doris(二十三):取消导入与其他导入案例参考
  • SQL-LABS
  • 【中间件篇-Redis缓存数据库07】Redis缓存使用问题及互联网运用
  • 物理引擎介绍
  • Ubuntu18.04平台下Qt开发程序打包的一些问题总结
  • 定时器setTimeout()、setInterval()详解
  • 测试端口开通的几种方法
  • Linux每日智囊
  • Word添加附件(附件图标被挡住的问题)
  • 【数据结构】单链表 | 详细讲解
  • 每日一题:编写程序,使程序分别输出两个整数的加减乘除运算结果
  • alpine linux如何指定软件包安装源
  • ubuntu设置脚本开机自启动
  • cobol-简介
  • 使用 JMeter 分布式性能测试
  • 【工具流】WSL2安装
  • OpenGL获取GPU信息
  • 毫米波雷达模块的目标检测与跟踪
  • Linux 下 使用 Ekho 进行TTS文本转语音
  • WiFi protocol 详解
  • llm模拟基本逻辑门
  • Linux学习第42天:Linux RS232/485/GPS 驱动实验:天外来客
  • CSDN每日一题学习训练——Python版(输入起始和结束的正整数,求其两个正整数之间的偶数和、两数相加)
  • 【论文】基于Hadoop的铁路货运大数据平台设计与应用
  • GoF之代理模式
  • post 和get参数 请求
  • RabbitMQ多线程配置和异常解决办法