前言:
C语言的相关知识点的笔记均在下面的专栏链接中,欢迎订阅!
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;
}