研究背景:
博主最近在学c语言,学到了struct(结构体)章节的时候,发现这不和java的对象一样吗?我们都知道,java中对象之间在进行互相赋值的时候,引用的是源对象的地址,但是呢,在c语言中呢,还是得做区分的。
案例1:
在第一张图中,调试窗口里面发现stu1.name属性的地址值和stu2.name地址值不一致,但是内容确是一致的。由此可见,这样的赋值形式,不是妥妥的深拷贝、值传递嘛?
案例2
这次我要把student中的char型数组改成char型指针,我想这样的话,name进行传递时候,应该是地址传递。
很可惜,这种方式虽然是student中的name字段虽然是地址传递,但是没办法修改该地址内存空间的值(因为字符串常量)
案例3:
那我想做到java这样的引用传递咋办?可以基于指针变量来互相赋值
拓展知识:
浅拷贝:
- 当结构体包含指向动态分配内存的指针时,浅拷贝只是简单地复制指针的值,而不是分配新的内存并复制内容。
- 因此,原始结构体和拷贝后的结构体将共享同一块动态内存。
深拷贝:
- 深拷贝会为结构体中的每个动态分配的成员分配新的内存,并将原始数据复制到新分配的内存中。
- 这样,原始结构体和深拷贝后的结构体将拥有完全独立的内存区域。