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

[C语言笔记]11、结构体

前言:

C语言的相关知识点的笔记均在下面的专栏链接中,欢迎订阅!

c语言笔记_1zero10的博客-CSDN博客

11-1结构体的定义和使用(创建)

法1:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义//格式:struct 结构体名 {结构体成员变量列表};
struct Book {char name[100];double price;int value;
};
int main() {
//2、结构体的使用//2-1、法1:struct 结构体名 变量名;struct Book c;strcpy(c.name, "c语言从入门到精通");c.price = 999;c.value = 1000000;printf("%s的价格是:%.2lf 价值是:%d\n", c.name, c.price, c.value);return 0;
}

 

法2:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义//格式:struct 结构体名 {结构体成员变量列表};
struct Book {char name[100];double price;int value;
};
int main() {
//2、结构体的使用//2-2、法2:struct 结构体名 变量名 = {初始化列表};struct Book py = { "python入门到精通",999,100000 };printf("%s的价格是:%.2lf 价值是:%d\n", py.name, py.price, py.value);return 0;
}

 

法3: 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义//格式:struct 结构体名 {结构体成员变量列表};
struct Book {char name[100];double price;int value;
}cpp;
int main() {
//2、结构体的使用//2-3、法3:直接创建strcpy(cpp.name, "c语言零基础编程");cpp.price = 399;cpp.value = 10000;printf("%s的价格是:%.2lf 价值是:%d\n", cpp.name, cpp.price, cpp.value);return 0;
}

 

11-2结构体数组

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
struct Book {char name[100];double price;int value;
};
int main() {//2、结构体数组的定义//格式:struct 结构体名 数组名[元素个数]={{},{},{}...};struct Book books[3] = {{"c语言程序设计",999,10000},{"python零基础到精通",999,10101},{"c++零基础编程",399,9999},};//3、修改结构体数组的元素strcpy(books[2].name, "c++从入门到入土");//4、循环遍历输出结构体数组for (int i = 0; i < 3; ++i) {struct Book tmp = books[i];printf("%s的价格是%.2lf 价值是:%d\n", tmp.name, tmp.price, tmp.value);}return 0;
}

 

 

11-3结构体指针

作用就是有效的修改单个人为创建的结构体的成员的值

比如

定义结构体:

struct Book { char name[100]; double price; int value; };

创建结构体

struct Book b={"c语言入门到精通",999,100000};

那么现在你需要把b中999 改成399.99如何修改

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//1、结构体的定义
struct Book {char name[100];double price;int value;
};
int main() {//2、结构体指针的创建 //格式 struct 结构体名 * 变量名 =&结构体变量;struct Book b = { "c语言程序入门到精通",999,100010 };struct Book* pb = &b;//3、修改b的值 两种修改方法(*pb).price = 399.99;pb->value = 10000;printf("%s的价格是%.2lf 价值是:%d\n", b.name, b.price, b.value);return 0;
}

 

 

11-4嵌套结构体

1、利用嵌套结构体

输出下面这句话

一个圆心坐标为(9,8),半径为5的圆

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//1、结构体的定义
struct Point {double x, y;
};
struct Circle {struct Point pt;//把定义圆心坐标的结构体Point 定义一个结构体变量pt嵌套进Circle结构体里 int radius; // 半径
};
int main() {struct Circle c; c.pt.x = 9;c.pt.y = 8;c.radius = 5;printf("这是一个圆心坐标为:(%.0lf,%.0lf),半径为:%d 的圆\n", c.pt.x, c.pt.y, c.radius);return 0;
}

 

 

2、利用嵌套结构体

达到以下题目要求:

现在有两个圆

要输出

这是一个圆心坐标为(9,8),半径为5的圆

这是一个圆心坐标为(2,1),半径为1的圆

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//1、结构体的定义
struct point {double x, y;
};
struct circle {struct point pt;//把定义圆心坐标的结构体Point 定义一个结构体变量pt嵌套进Circle结构体里 int radius; // 半径
};
struct circles {int size;struct circle c[100];
};
int main() {struct circles cs = {2,{{{9,8},5},{{2,1},1}}};for (int i = 0; i < cs.size; ++i) {struct circle tmp = cs.c[i];printf("这是一个圆心为:(%.0lf,%.0lf),半径为:%d 的圆\n", tmp.pt.x, tmp.pt.y, tmp.radius);}return 0;
}

 

11-5结构体作为参数传函数内部

结论:和变量作为参数传进函数道理一样

如果变量/结构体传进函数后需要对它的值进行修改 就得用址传递 即传入变量/结构体的指针

如果变量/结构体传进函数后不需要对它的值进行修改 就得用值传递 即传入变量/结构体本身

例:

用结构体定义一个 圆心坐标为(9,8)半径为5 的圆

然后定义movecircle函数用来修改圆心坐标和半径的值 横坐标+2 纵坐标-1 半径+3

再定义printcircle函数打印出新的圆心坐标和半径

#include <stdio.h>
struct circle {int x, y;int radius;
};
void movecircle(struct circle* c,int a, int b, int m) {(*c).x += a; (*c).y -= b;(*c).radius += m;/*也可写成这样c->x += a;c->y -= b;c->radius += m;*/
}void printcircle(struct circle c) {printf("新的圆的圆心坐标为:(%d,%d)半径为:%d", c.x, c.y, c.radius);
}int main() {struct circle c = { 9,8,5 };movecircle(&c, 2, 1, 3);printcircle(c);return 0;
}

http://www.dtcms.com/a/268671.html

相关文章:

  • 实用机器学习
  • 算法————模拟算法
  • Oracle实用参考(13)——Oracle for Linux PSR及PSU升级
  • C++系列(七):深度探索C++内存 --- 分区、堆栈、new/delete与高效编程实践
  • 动态规划递归与迭代实现对比
  • Data Agent:从技术本质到企业级实践的全景解析
  • LeetCode Hot 100 除自身以外数组的乘积
  • 16th Day| 222.完全二叉树的节点个数,110.平衡二叉树,257.二叉树的所有路径,404.左叶子之和
  • 分布式推客系统架构设计:从微服务到高性能计算的实践路径
  • WebView 中 Cookie 丢失怎么办?跨域状态不同步的调试与修复经验
  • 6,Receiving Messages:@KafkaListener Annotation
  • 诊断工程师进阶篇 --- 车载诊断怎么与时俱进?
  • vue3 字符包含
  • vue openlayer 找出直线上的某一个点 , 点距离直线 最短路径的点 WKT坐标转换为GeoJSON坐标
  • iOS Widget 开发-1:什么是 iOS Widget?开发前的基本认知
  • 亚马逊运营进阶指南:如何用AI工具赋能广告运营
  • 期待在 VR 森林体验模拟中实现与森林的 “虚拟复现”​
  • 华锐视点 VR 污水处理技术对激发学习兴趣的作用​
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十四天
  • UI + MCP Client + MCP Server实验案例
  • 【机器学习笔记 Ⅱ】11 决策树模型
  • Spring Boot 操作 Redis 时 KeySerializer 和 HashKeySerializer 有什么区别?
  • day16——Java集合进阶(Collection、List、Set)
  • Kafka消息积压的原因分析与解决方案
  • 网络安全之重放攻击:原理、危害与防御之道
  • windows grpcurl
  • 用安卓手机给苹果手机设置使用时长限制,怎样将苹果手机的某些APP设置为禁用?有三种方法
  • 软件工程功能点估算基础
  • QML Row与Column布局
  • YOLOv11 架构优化:提升目标检测性能