【问题标题】:Efficient way to copying array of pointer to another pointer [closed]将指针数组复制到另一个指针的有效方法[关闭]
【发布时间】:2015-10-26 12:25:14
【问题描述】:

如何将指针数组复制到另一个指针。

我的方法是这样的

int *ptr2[(i-1)*100];
int *ptr1;

ptr1=&ptr2[(i-1)*100];

什么是复制的有效方法可以减少cpu周期。

【问题讨论】:

  • 你不是在“复制”一个数组。您只需将数组的地址分配给指针变量。这不需要 CPU 时间(几乎没有)。请更好地解释你想做什么。
  • 所以你有一个大小为(i - 1) * 100ptr2 数组,然后用(i - 1) * 100 对其进行索引。该索引是 1 太远了。
  • "memcpy()" 是复制数组时的武器选择。
  • 我不明白为什么这个问题被否决了。人们总是在为指针而苦苦挣扎,我们在这里为您提供帮助/解释。
  • @Pynchia 已经有大量关于指针和数组是什么或不是什么的资源。这也不是一个复杂的主题。所以人们厌倦了关于数组和指针的无意义的问题,这些问题完全没有研究工作。

标签: c


【解决方案1】:

如果你需要复制(复制)ptr2,你需要用正确的类型声明ptr1,为ptr1数组分配空间,然后将ptr2的内容复制到ptr1

#include <malloc.h>
#include <string.h>

int *ptr2[(i-1)*100];
int **ptr1; // a pointer to a pointer to an int

ptr1 = malloc(sizeof(ptr2));
memcpy(ptr1, ptr2, sizeof(ptr2));

注意:这是一个例子。始终确保malloc 在使用之前分配了内存块,并在不再需要时释放它(使用free

另一方面,如果您只想为ptr2 创建一个别名

int *ptr2[(i-1)*100];
int **ptr1; // a pointer to a pointer to an int

ptr1 = ptr2;

【讨论】:

  • 你认为sizeof(ptr2)会返回什么?
  • 我明白你的意思。 siezof(ptr2) 返回整个数组占用。 (即 intsize*(i-1)*100)。请随意描述准确的措辞。答案已编辑。在讨论之前投反对票是不礼貌的。
  • @qrdl ptr2 是一个包含(i-1)*100 类型为int* 的元素的数组,因此sizeof(ptr2) 将返回该数组占用的字节数,这取决于硬件架构。该名称令人困惑,将* 放在变量名旁边而不是int 旁边。更清晰的声明可能是:int* arrayOfPointersToIntegers[(i-1)*100];。总体而言,答案中的代码将按预期运行。
  • @Pynchia 这个答案并没有真正解决关于使用memcpy 的效率问题,而不是其他一些手纺技术。我怀疑memcpy(作为库函数)的大多数实现都针对性能进行了预先优化,尽管在嵌入式软件中对于某些特定任务并不总是如此。
【解决方案2】:

您可以使用memcpy 复制值-

int *ptr2[(i-1)*100];
int **ptr1;

prt1=malloc(sizeof(ptr2));     //also remember to free allocated memory.

memcpy(ptr1,ptr2,sizeof(ptr2));

【讨论】:

  • 为什么要转换sizeof的结果? mallocmemcpy 都接受sizeof 提供的size_t
  • @Quentin 是的,我知道这个演员表是不必要的。谢谢!!
  • 你确定ptr1的类型吗?
  • @Pynchia 嗯……很确定。为什么会出现问题?
  • 根据您的声明int *ptr1,ptr1 是一个指向整数的指针。但是ptr2 是一个指针数组(指向一个整数),而不是一个整数数组。
猜你喜欢
  • 2021-02-07
  • 2019-09-27
  • 2016-07-21
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2015-06-19
  • 2014-10-19
  • 2011-05-08
相关资源
最近更新 更多