C语言 结构复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 结构复制相关的知识,希望对你有一定的参考价值。

定义一个结构 typedef struct SA int arr[10];S;
定义两个变量 S a=1,2,3,b=a;

想问a是怎样复制给b的,是将a.arr[]中的每个元素复制给b.arr[]的每个元素,还是将a.arr[]的首地址复制给b.arr[]的首地址。 给出依据,比如哪本书或哪篇网络文章等。 不懂的请不要随便回答。
其实我一开始就知道是将a.arr[]中所有元素的值复制给b.arr[]的所有元素。 我想问的的是:下面的函数定义方式是正确的而且是可行的对么? S y()……;
而且把结构体定义中的int arr[10]改为char arr[10]或其他类型也是可以的对吧。 这样的话就可以返回任何数组了,虽然我知道返回整体数组效率不高。

是将a.arr[]中的每个元素复制给b.arr[]的每个元素,注意你定义的是一个结构体,c语言里面,定义的时候就已经分配了空间,所以b也是一个结构体,有自己的空间,有自己的首地址,和a的地址没有关系,也没有重叠,当你定义了S a=1,2,3;那么a.arr[0]=1;a.arr[1]=2;a.arr[3]=3;a.arr[4]一直到a.arr[9]都是0,这个是数组的赋值,部分赋值之后,没有被赋值的就是0,相信你明白这个,那么b=a;之后,b的情况和a的一样,b.arr[]中的值和a.arr[]中的值一样的,但是是两个不一样的结构体,但是如果:
S a=1,2,3,*b=&a;
这个时候你定义的b是一个指向结构体的指针,现在把它初始化为指向a,那么这个时候是将a的地址也就是a.arr[]的地址赋值给了b。

S y()……; 这样是可以的,函数你要返回一个值,这个值是已经定义的结果或者是系统里面有的就可以的,这里你的函数y返回的是一个结构体,这个当然是可以的了

另外,你那么的改当然也是可以的了,结构体是你定义的,你可以改成任何的类型,只要不出现语法错误,可以的呀~~~,你返回什么那是函数里面要实现的功能,看你怎么实现了,和定义是没有必然的直接的联系的~~~
参考技术A 当然是复制每个元素啦!

b又不是个指针变量!

参考资料:好像这种复制大数组的方法也是我告诉你的吧?!

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

randomTeam是前面随机生成数
closureLNK closure_link里index成员是整型,这里我说错了

1.如果这个结构体没有指针成员的话,可以直接用“=”号赋值(目前主流的编译器都支持这样的赋值,如果是特别老旧的编译器可能不支持这样,那就要把每个成员分别赋值了 如果有指针成员,那么这个指针成员不能简单的赋值 参考技术A 可以的,数组复制等于号就是直接拷贝,但是你需要考虑的是,深复制还是浅复制问题。根据你的业务逻辑来处理。语法上是支持的。 参考技术B 二维数组 不可以直接赋值一维数组
而是要逐项赋值
或者用memcpy整体赋值。
你的这个代码 就是逐项赋值的
参考技术C 1.如果这个结构体没有指针成员的话,可以直接用“=”号赋值(目前主流的编译器都支持这样的赋值,如果是特别老旧的编译器可能不支持这样,那就要把每个成员分别赋值了 如果有指针成员,那么这个指针成员不能简单的赋值 参考技术D 如果对内存熟悉的话可以直接拷贝内存
memcpy来进行数组复制。追问

这样写合乎语法吗?

以上是关于C语言 结构复制的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么将结构体的内容复制到另一个结构体中

c语言如何实现结构体的深度复制

c语言strcpy将一个结构体的数据复制到另一个后,出问题了

c语言结构体初始化

c语言结构体初始化

C语言结构体值复制与字符数组值复制的比较测试