C语言中结构体可以通过=号直接复制么?数据结构中所讲的动态分配的数组如何在 C 语言中实现

时间:2017-12-30 00:20:02   浏览:次   点击:次   作者:   来源:   立即下载

代码如下:

#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 ⓪;}

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息