我的代码可以正常工作,但我觉得似乎有更快的方法来执行此操作,尤其是在我的函数副本中。这是我的代码。这可以更快吗?这是在 C 顺便说一句。另外,当我从函数返回 cpy 时,它是否会删除动态内存,因为它超出了范围?我不想有内存泄漏 :P
#include <stdio.h>
#include <stdlib.h>
double *copy(double a[], unsigned ele);
int main(){
double arr[8], *ptr;
unsigned i=0;
for(;i<7;i++){
scanf_s("%lf", &arr[i]);
}
ptr=copy(arr, 8);
for(i=0;i<7; i++)
printf("%f", ptr[i]);
}
double *copy(double a[], unsigned ele){
double *cpy= malloc(sizeof(double)*ele);
int i=0;
for(;i<ele; i++)
cpy[i]=a[i];
return cpy;
}
最佳答案
您可以用 memcpy
替换您的 for
。
memcpy(cpy, a, ele * sizeof *cpy);
除此之外,您所做的还不错:您正在返回一个指针,因此调用者有机会释放
它。
此外,我认为如果您要退出,最好不要调用 free
- 操作系统无论如何都会收集内存。
关于将数组复制到动态分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577787/