2017-12-14 4 views
-1

私は関数の関数から行と列を変更できるプログラムを書いています。私はポインタのポインタを行う方法を理解していません。ポインタのポインタを指す方法

void changeNum(int*setRows, int *setCol) 
{ 
    changeNum2(*setRows,*setCol); 
} 
void changeNum2(int*setRows, int *setCol) 
{ 
    *setRows=5; 
    *setCol=5; 
} 
int main() { 
    int*row=10; 
    int* col=10; 
    changeNum(&row,&col); 
    printf("%d %d",row,col); 
    return 0; 
} 
+2

教科書/オンラインコース/個人教師は、あなたを助けることができるはずです。 – John3136

+0

質問タイトルだけは、あなたが3スタープログラマ(http://wiki.c2.com/?ThreeStarProgrammer)に近づいていることを示しています。再考してください。 – Yunnosch

答えて

1

まず

int*row=10; 
    int* col=10; 

これは間違っています。ハードコードされたアドレスの割り当て。あなたはこれが欲しくないです

int row=10; 
    int col=10; 

行と列のアドレスを取得するには?

&rowおよび&col

どのように機能させるには?

は、ポインタへのポインタを渡す方法changeNum(&row,&col);

void changeNum(int*setRows, int *setCol) 
{ 
    ...  
} 

、それを呼び出しますか?

void changeNum(int*setRows, int *setCol) 
{ 
    chnageNum2(&setRows, &setCol); 
} 

ChangeNum2どのように値が変更されるのですか?

void chnageNum2(int **setRows, int **setCol){ 
    **setRows = 110; 
    **setCol = 110; 
} 

我々は唯一changeNum()を使用して、同じ変更を行うことができますか?

はい、私たちはそれを行うことができます。

void changeNum(int*setRows, int *setCol) 
{ 
    *setRows = 110; 
    *setCol = 110;   
} 

確かにthisをチェックします。本を掴む。それは多くの助けになります。

完全なコードは、それがすべてのC関数のパラメータは値渡しされていることを把握するためにいつか取る

void changeNum(int*setRows, int *setCol) 
{ 
    changeNum2(&setRows,&setCol); 
} 
void changeNum2(int**setRows, int **setCol) 
{ 
    **setRows=5; 
    **setCol=5; 
} 
int main(void) { 
    int row=10; 
    int col=10; 
    changeNum(&row,&col); 
    printf("%d %d",row,col); 
    return 0; 
} 
0
#include <stdio.h> 

void changeNum(int*, int*); 
void changeNum2(int*, int*); 

void changeNum(int* setRows, int *setCol) { 
    changeNum2(setRows,setCol); 
} 

void changeNum2(int* setRows, int *setCol) { 
    *setRows=5; 
    *setCol=5; 
} 

int main() { 
    int row=10; 
    int col=10; 
    changeNum(&row, &col); 
    printf("%d %d\n", row, col); 
    return 0; 
} 

になります。だから、安全にその値でsetRowsポインタを2番目の関数に渡すことができます。

また、以前は関数changeNum2を宣言する必要がありました。可能性を明確にするために、パラメータ名のない宣言を含めました。

この書籍は、https://en.wikipedia.org/wiki/The_C_Programming_Language、特に第5章(ポインタと配列)を読むことを強くお勧めします。

あなたは簡単にPDFのコピーを見つけることができます。私はこのコンセプトを最終的に学んだのです。

関連する問題