2017-03-06 97 views
0
void f(int pv1, int *pv2, int *pv3, int pv4[]){ 
    int lv = pv1+ *pv2 + *pv3 + pv4[0]; 
    pv1= 11; 
    *pv2= 22; 
    *pv3= 33; 
    pv4[0]= lv; 
    pv4[1]=44; 
} 

int main(void){ 
    int lv1=1, lv2=2; 
    int *lv3; 
    int lv4[]= {4,5,6}; 
    lv3= lv4+2; 
    f(lv1, &lv2, lv3 , lv4); 
    printf("%i,%i,%i\n", lv1, lv2, *lv3); 
    printf("%i,%i,%i\n", lv4[0], lv4[1], lv4[2]); 
    return 0; 
} 

答:1月22日33C參數傳遞和指針

我不明白怎麼。

我的工作: LV1 = 1,LV2 = 2,LV3 = LV4 + 2 = 6,LV4 [] = {4,5,6}

至f去()之後, Lv1的= 11 ,lv2 = 22,lv3 = 33,lv4 [0] = 13和lv4 [1] = 44

+0

'pv1 = 11;'不影響'lv1'。 – BLUEPIXY

+0

請添加一些說明你想做什麼以便可以檢查錯誤 –

+0

可能的重複[如何修改已傳遞到C函數中的指針](http://stackoverflow.com/questions/766893/how-do-i-modify-a-pointer-that-has-been-passed-into-a-function-in-c) – StoryTeller

回答

1

這裏沒有什麼是不可理解的。

  • pv1= 11;不會影響lv1價值,因爲你只是在填充一個f()局部變量pv1,沒有任何指針。 pv1參數通過值傳遞,併成爲f()的局部。的*lv3 & lv2

  • 值與22 & 33.因爲在使用指針地址更新,您的更新值。

+0

@linuxfan thanks for edit .. – jjb