【问题标题】:My program is setting the first array element to the NUM_EL rather than a random number but the rest of the elements get randoms我的程序将第一个数组元素设置为 NUM_EL 而不是随机数,但其余元素是随机数
【发布时间】:2013-05-02 09:16:07
【问题描述】:
#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 数组)之外,该代码运行完美。

【问题讨论】:

  • 看起来 正确(尽管 pa 完全没有必要)。你确定你打印的东西正确吗?
  • 显示调用这个函数并打印结果的代码,包括你传入的数组的声明。
  • 我编辑了帖子以包含完整的代码。

标签: c arrays pointers random


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2012-05-05
      • 2015-08-06
      • 2020-12-07
      相关资源
      最近更新 更多