呼び出された関数からさらに関数を呼ぶときの、ポインタの扱いについて。
Posted: 2013年7月08日(月) 05:32
おはようございます。
初心者です。よろしくおねがいします。
下記のような関係のプログラムを作成しています。
main関数内には、int型の2次元配列a、int型の変数b,cがあります。
main関数内では、関数sub1を呼び出します。
呼び出す際の引数はa,b,cです。
いずれも、sub1内で値を書き換えたいので、アドレスを渡します。
sub1内では、関数sub2を呼び出します。
呼び出す際の引数はa,bです。
ここでも、いずれの値もsub2内でさらに書き換えたいので、アドレスを渡したいです。
上のようなプログラムを書いてみましたが、
sub1内で関数sub2を呼び出す際にbのアドレスを引数として渡すのには、このやり方でいいのでしょうか。
実行結果は正しいように思えました。ですが
(当たり前だとは思いますが)同じようにアドレスを渡したいのに、main内では*b、sub1内ではbとなっており
main関数内でsub1を呼び出すときと、関数sub1内でsub2を呼び出すときで
書き方が違うので少しややこしいと思いました。
もっとわかりやすく、(このやり方が間違っているのなら、正しく)
アドレスを渡すにはどうすればいいでしょうか。
曖昧な質問で申し訳ありませんが、
どなたか詳しい方がおられましたら、ご教示お願いいたします。
初心者です。よろしくおねがいします。
下記のような関係のプログラムを作成しています。
main関数内には、int型の2次元配列a、int型の変数b,cがあります。
main関数内では、関数sub1を呼び出します。
呼び出す際の引数はa,b,cです。
いずれも、sub1内で値を書き換えたいので、アドレスを渡します。
sub1内では、関数sub2を呼び出します。
呼び出す際の引数はa,bです。
ここでも、いずれの値もsub2内でさらに書き換えたいので、アドレスを渡したいです。
//省略
sub1(int (*a)[10],int *b, int *c);
sub2(int (*a)[10],int *b);
int main(void)
{
int a[10][10]={/* 省略 */ };
int b=0;
int c=0;
sub1(a,&b,&c);
//省略
}
void sub1(int (*a)[10], int *b, int *c)
{
//省略
sub2(a,b);
//省略
return ;
}
void sub2(int (*a)[10], int *b)
{
//省略
return ;
}
sub1内で関数sub2を呼び出す際にbのアドレスを引数として渡すのには、このやり方でいいのでしょうか。
実行結果は正しいように思えました。ですが
(当たり前だとは思いますが)同じようにアドレスを渡したいのに、main内では*b、sub1内ではbとなっており
main関数内でsub1を呼び出すときと、関数sub1内でsub2を呼び出すときで
書き方が違うので少しややこしいと思いました。
もっとわかりやすく、(このやり方が間違っているのなら、正しく)
アドレスを渡すにはどうすればいいでしょうか。
曖昧な質問で申し訳ありませんが、
どなたか詳しい方がおられましたら、ご教示お願いいたします。