2017-03-06 5 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-of-a-function-in-cに渡されました – StoryTeller

答えて

1

ここでは何も理解できません。

  • pv1= 11;あなただけf()内のローカル変数pv1、ない任意のポインタを移入しているため、lv1の値には影響しません。 pv1引数は値によって渡され、f()に対してローカルになります。 *lv3 & lv2

  • 値は、ポインタを使用してアドレスで、そのため22 & 33を使用して更新値を更新しています。

+0

@linuxfan編集のおかげで.. – jjb

関連する問題