#define NUM_EL 10
int randomArray1[NUM_EL];
int randomArray2[NUM_EL];
int sumArray[NUM_EL];
//Function Protocol
int IntializeArrayWithPointers(int, int, int);
void DisplayArrayDataWithPointers(int);
int AddTwoArraysWithPointers(int,int,int);
int main()
{
*randomArray1=IntializeArrayWithPointers(randomArray1, 0, 1);
*randomArray2=IntializeArrayWithPointers(randomArray2, 10, 11);
*sumArray=AddTwoArraysWithPointers(randomArray1,randomArray2,sumArray);
DisplayArrayDataWithPointers(randomArray1);
DisplayArrayDataWithPointers(randomArray2);
DisplayArrayDataWithPointers(sumArray);
}
int IntializeArrayWithPointers(int pointer1[], int a, int b)
{
int i;
int* pa;
pa= pointer1;
for(i = 0; i < NUM_EL; i++)
{
pa[i] = rand()%(b-a+1)+a;
}
}
void DisplayArrayDataWithPointers(int* p)
{
int i;
for(i = 0; i < NUM_EL; i++)
{
printf("arrayEL[%d] = %d at %p \n",i,p[i],&p[i]);
}
printf("\n");
}
int AddTwoArraysWithPointers(int a[],int b[],int c[])
{
int i;
int *pa;
int *pb;
int *pc;
pa = a;
pb = b;
pc = c;
for(i=0;i<NUM_EL;i++)
{
*(pc +i)=*(pa +i)+*(pb +i);
}
}
第一个元素在打印数组时始终显示为NUM_EL
的值。即使我在0到1之间设置rand
s,也会发生这种情况。其余的都是随机的,就像它们应该的那样。除了包含sum数组的每个数组的第一个元素外,代码工作正常。
答案 0 :(得分:4)
当您调用该函数时,您可以这样执行:
*randomArray1=IntializeArrayWithPointers(randomArray1, 0, 1);
这会将函数的返回值赋给randomArray1
的第一个元素。由于您不想这样做,您应该删除作业。
实际上,该函数甚至没有返回值,因此行为未定义。您应该将该函数声明为返回void
。
另一个问题是函数声明中的类型与函数定义中的类型不匹配 - 始终确保它们匹配,并注意编译器警告,这会提醒您。
答案 1 :(得分:0)
* randomArray1 = IntializeArrayWithPointers(randomArray1,0,1);
此语句将函数的返回值设置为randomArray1的第一个元素。这就是为什么它会被修改。
删除赋值并声明IntializeArrayWithPointers(),返回类型为void。