gpt4 book ai didi

c - 整数数组的深拷贝,仅使用指针算法

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:00 25 4
gpt4 key购买 nike

我需要编写一个函数来深拷贝一个整数数组,仅使用指针算法(即不能使用像 orig[i] 这样的数组元素语法)。

第一个参数是要复制的数组,其长度由第二个参数指定。

这是我目前所拥有的:

int* copyArray(const int *orig, int size) {

int *copy = malloc(size * sizeof *copy);

int **toReturn = ©

for (int i = 0; i < size; i++, orig++, copy++) {
*copy = *orig;
}

return *toReturn;

}

int main () {

int testArray[3] = {1, 2, 3};
int *testptr = testArray;

int *copied = copyArray(testptr, 3);

for (int i = 0; i < 3; i++) {

printf("%d %p", testArray[i], &testArray[i]);
printf("\n");

}

printf("\n");

for (int i = 0; i < 3; i++) {

printf("%d %p", copied[i], &copied[i]);
printf("\n");

}

return 0;
}

这没有给我正确的结果...我从中得到的结果是:

1 0x7ffce0ff6fd0
2 0x7ffce0ff6fd4
3 0x7ffce0ff6fd8

0 0xe1301c
0 0xe13020
0 0xe13024

而它应该是:

1 0x7ffce0ff6fd0
2 0x7ffce0ff6fd4
3 0x7ffce0ff6fd8

1 0xe1301c
2 0xe13020
3 0xe13024

我是指针和内存分配的新手...我做错了什么?

更新:问题已解决!

看看我的答案,或者其他同样有效的答案。

最佳答案

copyArray 更改为类似

的内容
int *copyArray( const int *orig, size_t size )
{
int *copy = malloc(size * sizeof( *copy ) );

for ( size_t ii = 0; ii < size; ii++ )
{
copy[ ii ] = orig[ ii ];
}
return( copy );
}

在风格上,我个人喜欢 ii 而不是 i。很难搜索 i。对于用于描述某物大小的东西,size_t 是比 int 更好的选择。

如果 malloc 返回 NULL,您可能应该添加一些错误检查。

而且,没有索引指针(因为简单的代码要被禁止?!?)

int *copyArray( const int *orig, size_t size )
{
int *copy = malloc(size * sizeof( *copy ) );

memcpy( copy, orig, size * sizeof( *copy ) );
return( copy );
}

无论如何,这可能会更快。适当的 header 包含留给读者作为练习...;-)

不过,它仍然需要错误检查。

关于c - 整数数组的深拷贝,仅使用指针算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39949475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com