0
#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。即使我将rands 设置在 0 和 1 之间,也会发生这种情况。其余的都是随机的,就像他们应该的那样。除了每个数组的第一个元素(包括 sum 数组)之外,该代码运行完美。

4

2 回答 2

4

当你调用这个函数时,你会这样做:

*randomArray1=IntializeArrayWithPointers(randomArray1, 0, 1);

这会将函数的返回值分配给randomArray1. 既然你不想要这个,你应该删除分配。

事实上,该函数甚至不返回值,因此行为是未定义的。您应该将该函数声明为返回void

另一个问题是函数声明中的类型与函数定义中的类型不匹配 - 始终确保它们匹配,并注意编译器警告会提醒您这一点。

于 2013-05-02T09:34:44.390 回答
0

*randomArray1=IntializeArrayWithPointers(randomArray1, 0, 1);

此语句将函数的返回值设置为 randomArray1 的第一个元素。这就是它被修改的原因。

删除赋值并声明 IntializeArrayWithPointers() ,返回类型为 void。

于 2013-05-02T10:00:50.263 回答