mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月11日 13:50
This commit is contained in:
parent
5f00d7804e
commit
a6ef200de0
@ -339,7 +339,7 @@ int main() {
|
||||
|
||||
### 2.2.2 需求分析 2
|
||||
|
||||
* 隔壁老王养了两只猫咪。一只名字叫小黄,今年 2 岁,橘色;另一只叫小黑,今年 3 岁,黑色。请编写一个程序,当用户输入小猫的名字 时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示老王没有这只猫。
|
||||
* 隔壁老王养了两只猫咪。一只名字叫小黄,今年 2 岁,橘色;另一只叫小黑,今年 3 岁,黑色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示老王没有这只猫。
|
||||
|
||||
![](./assets/6.png)
|
||||
|
||||
@ -357,7 +357,8 @@ int main() {
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能。
|
||||
> * ① C 语言没有其他面向对象编程语言中的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能。
|
||||
> * ② C++ 语言并不是一种完全面向对象的语言,Java 语言和 C# 才是完全面向对象的编程语言。
|
||||
|
||||
## 2.4 结构体的基本使用
|
||||
|
||||
@ -1371,6 +1372,82 @@ int main() {
|
||||
> * ④ 内存对齐的时候可能会出现“填充”字节,但是并不会改变原来数据的大小,即:char 类型的数据即使“填充”字节之后,本身还是 1 个字节。
|
||||
> * ⑤ `心得`:我们会将小的数据类型,写在最上面;大的数据类型,写在最下面(节省内存空间)。
|
||||
|
||||
### 2.5.3 结构体变量之间的赋值操作
|
||||
|
||||
* 在 C 语言中,同类型的`结构体变量`之间的`赋值`是`值传递`,而不是`地址传递`。
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> * ① 当我们将一个结构体变量赋值给另一个结构体变量时,实际上是将源结构体中的所有成员变量的值`逐个复制`到目标结构体中。因此,目标结构体会得到源结构体的一个`独立副本`,两者在内存中的数据是`完全独立`的。
|
||||
> * ② 修改源结构体的成员变量不会影响目标结构体的成员,反之亦然,因为它们是独立的副本。
|
||||
> * ③ 在 Java 中,对象之间的赋值是`地址传递`。但是,C 语言中结构体变量之间的赋值是`值传递`。
|
||||
|
||||
|
||||
|
||||
* 示例:
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
struct Student {
|
||||
int age;
|
||||
char *name;
|
||||
};
|
||||
|
||||
int main() {
|
||||
|
||||
// 禁用 stdout 缓冲区
|
||||
setbuf(stdout, nullptr);
|
||||
|
||||
struct Student stu1 = {20, "张三"};
|
||||
struct Student stu2 = stu1;
|
||||
|
||||
printf("stu1 = %p\n", &stu1); // stu1 = 0x7ffc3f0d2880
|
||||
printf("stu2 = %p\n", &stu2); // stu2 = 0x7ffc3f0d2890
|
||||
|
||||
// 修改结构体变量中成员的值,并不会影响另一个结构体变量中成员的值
|
||||
// 因为两个结构体变量都各自独立的
|
||||
stu1.age = 21;
|
||||
stu2.name = "王五";
|
||||
|
||||
printf("stu1.name = %s\n", stu1.name); // stu1.name = 张三
|
||||
printf("stu2.name = %s\n", stu2.name); // stu2.name = 王五
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
## 2.6 结构体数组
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 2.7 结构体指针
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 2.8 结构体在数据结构中的应用
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1383,4 +1460,12 @@ int main() {
|
||||
|
||||
|
||||
|
||||
# 第四章:typedef
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user