0

在以下代码中:

void fusioneArray(int v[], int vL, int w[], int wL[], int *fusione)
{
   int i,j,temp;
   int k=0;
   printf("%d",wL+vL);

   for(i=0;i<vL;i++)
   {
       fusione[k]=v[i];
       k++;
   }

   for(j=0;j<wL;j++)
   {
       fusione[k]=w[j];
       k++;
   }
}

int main()
{
    int v[5]={1,2,3,4,5};
    int w[5]={5,4,3,2,1};
    int i=0;
    int fusione[10];
    fusioneArray(v,5,w,5,fusione);
}

你能解释一下为什么 vL+wL 返回 * 而不是 + 吗?(25 个而不是 10 个)...

4

1 回答 1

7

因为wL是代码中的指针,因此您正在执行指针算术而不是标准整数算术:

wL+vL = wL + vL*sizeof(int)

由于 aint在大多数平台上是 4 字节,因此您会wL+vL变成5+5*4 = 25,这就是您得到的结果。只需int wL[]用正确的替换,int wL您将获得所需的行为。

于 2012-06-29T09:38:26.380 回答