2012-06-29 6 views
0

в следующем коде:Почему переменная sum возвращает умножение?

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) ...

+3

'int wL []'? Вы имели в виду 'int wL'? – Henrik

ответ

7

Поскольку wL является указателем в вашем коде, таким образом, вы делаете указатель арифметик вместо стандартной целочисленной арифметики:

Wl + Vl = Wl + Vl * SizeOf (ИНТ)

Поскольку int 4 байта на большинстве платформ ваш wL+vL становится 5+5*4 = 25, которая в результате вы получите. Просто замените int wL[] на правильный int wL, и вы получите желаемое поведение.

+0

И иногда еще более веселое левое поле, чем это, потому что это нечто вроде компилятора. Когда я получаю массивные отрицательные числа на простой арифметике, я знаю, что где-то я наводил указатели. – SilverbackNet

+0

Я не видел [] в wL -.- «спасибо за ваш ответ. :) –

Смежные вопросы