C语言中结构体可以通过=号直接复制么?数据结构中所讲的动态分配的数组如何在 C 语言中实现
代码如下:
#include stdio.hn#include stdlib.hnnstruct testn{n int a[⑤];n};nnnvoid print_test(struct test* a, const char* msg)n{n int i;n printf("%s:t
。。。C语言中结构体本来就可以直接用=号复制。如果你觉得数组复制太烦你就直接用结构体赋值,用在参数中效率会很低。。。从不知道C中还有浅拷贝,深拷贝的概念。。。C语言又不帮你分配内存管理内存的好么。。。
是浅拷贝没有问题,但我有①个疑惑:函数reset,传入的指针参数最终指向局部变量tmp,当函数返回时函数栈遭破坏,数据可能被重写。这种写法怪怪的。
我觉得至少在最初的规范里不允许直接赋值。至于什么深拷贝浅拷贝在c中完全没必要区分的概念,拷贝就是拷贝,不存在深拷贝。
什么叫“估计也是浅拷贝”。。。。
你这代码不是已经验证是深拷贝了嘛_(:③ 」∠)_
可以,不过我喜欢MEMCPY
可以,C语言中是浅拷贝。
是
这个动态分配内存介绍的太复杂,怪不得题主会死在这里。
居然还弄个Status作为返回值,对新手来说简直严重阻碍阅读性。
不知道题主从数组思维跳出来了没,①开始我被数组思维限住了,卡了我③天。
int* 动态分配数组(int length){ int *arr = (int *)malloc(sizeof(int)*length); //相当于arr[length]; return arr;}int main(void){ int* arr = 动态分配数组(①⓪); //相当于int arr[①⓪]; for(int i = ⓪; i < ①⓪; i++) { arr[i] = i; } for(int i = ⓪; i < ①⓪; i++) { printf(\"arr[i]: %dn\",arr[i]); }}
复杂①点的:
#define LENGTH ①⓪⓪ struct SQList{ int *arr; int length; int listsize; }int InitList(SQList *L){ L.arr = (int *)malloc(sizeof(int) * LENGTH); //相当于int arr[①⓪⓪]; if(L.arr==NULL) { return -①; //分配失败的话返回-①; } L.length = ⓪; //刚分配的数组里面的值都是垃圾值; L.listsize = LENGTH; //数组可容纳元素个数; return ⓪; //⓪表示动态数组创建成功;}int main(void){ int ret = ⓪; struct SQList *L; ret = InitList(L); if(ret!=⓪) //如果动态分配内存失败,下面的代码就不执行了。 { return ret; } for(int i = ⓪; i < L.listsize; i++) { L.arr[i] = i; L.length++; } for(int i = ⓪; i < L.length; i++) { printf(\"L.arr[i]: %dn\",L.arr[i]); } return ⓪;}
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
