2
#include<stdio.h>

void int_copy(int* ptrA,int* ptrB,int nbr){
 //int* temp = ptrB;
 while(nbr != 0){
  *ptrB++ = *ptrA++;
  nbr--;
 }
 *ptrB = -1;
 //ptrB = temp;
}

int main(){
 int stringa[40] = {100,101,102,103,104,105,106,107,108,109,110,-1};
 int stringb[40] = {0};
 int *ptr;
 int *ptr1;
 int len = 0;

 ptr = stringa;
 ptr1 = stringb;

 while(*ptr != -1){
  *ptr++;len++;
 }

 printf("\n len : %d \n",len);

 int_copy(stringa,stringb,len);

 while(*ptr1 != -1){
  printf("%d\t",*ptr1);
  *ptr1++;
 }

 return 0;
}

我正在尝试一个示例程序来将整数数组复制到另一个整数数组。有没有另一种更有效的方式来做到这一点。

编辑:

void int_copy(int* ptrA,int* ptrB,int nbr){
 memcpy(ptrA,ptrB,(sizeof(int)*nbr));
}
4

2 回答 2

5

不要使用标记(-1),存储长度。

然后你可以使用memcpy- 提示:复制sizeof(int)*len字节。

于 2013-07-11T07:29:03.630 回答
0

我正在尝试一个示例程序来将整数数组复制到另一个整数数组。有没有另一种更有效的方式来做到这一点。

由于这是一个示例程序,我不确定您的真实程序是什么样的。但至于分配数组:您可以静态地(如您的示例中)或动态地使用 eg malloc()。无论哪种方式,数组的大小都是已知的(在源代码中固定或间接通过 malloc 调用的 size 参数)。

所以是的,既然你应该知道数组的大小,你可以使用memcpy()哪个更有效,因为它的实现针对它运行的架构进行了优化。

顺便说一句:一个例外可能是一个为您分配内存并且不提供数组长度的库。但是我从来没有遇到过这样的情况...

于 2013-07-11T07:59:51.763 回答