ページ 1 / 1
ポインタについて
Posted: 2008年9月15日(月) 16:43
by ライン
#include <stdio.h>
main()
{
int a=100,b;
int *p_a;
p_a=&a;
b=*p_a;
printf("変数a,変数b,ポインタの内容\n");
printf("a=%d b=%d *p_a=(ポインタ ノナ イヨウ)%d",a,b,*p_a);
}
上記のプログラムが本を見ながらやったのですが、ポインタの意味がよくわからないです。
くわしい説明をお願いします。
Re:ポインタについて
Posted: 2008年9月15日(月) 17:09
by 御津凪
ポインタとはアドレス、つまり、値の住所を格納することができる型です。
家の住所がこれに当たるでしょう。
上記のコードでは、 p_a=&a; で
a の住所を p_a に格納し、
b=*p_a; で
p_a の住所にある値を b に格納しています。
p_a は、住所を格納しているので、実際の値(a の値)を持っていません。
そのため、上記のコードを、
#include <stdio.h>
int main( void )
{
int a=100,b;
int *p_a;
p_a=&a;
b=*p_a;
printf("変数a,変数b,ポインタの内容\n");
printf("a=%d b=%d *p_a=(ポインタ ノナ イヨウ)%d\n",a,b,*p_a);
a = 200;
printf("a=%d b=%d *p_a=(ポインタ ノナ イヨウ)%d\n",a,b,*p_a);
return 0;
}
と変更して実行すると、
a は 200、
b は 100、
そして、 *p_a は 200 になるはずです。
これは、 *p_a は a の住所を指しているため、間接的に a の値を取得しているからです。
(これで理解できるでしょうか。)
ちなみに、 main 関数が違ったり、戻り値が付いているのは、こちらが正しい関数の書き方だからです。
(引数は使わないので空( void )にしています)
Re:ポインタについて
Posted: 2008年9月15日(月) 17:19
by array
先越されましたが一応書いたので(^^;
御津凪さんと同じような事しか言ってませんけど。文で説明してるので読む気になれば、読んでください。
この前本屋でみたのですが、ポインタや配列を覚えるのは「Cの絵本」ってやつが、とても分かりやすかったです。
プログラムの考えみたいのが、絵を使いとてもわかりやすく解説してくれてます。あまり詳しく見てませんが、多分システム的な意味でも理解できるような気がします。
>上記のプログラムが本を見ながらやったのですが、ポインタの意味がよくわからないです。
なんか大雑把すぎて何を説明して良いのか分かりませんが
ポインタの意味としては、int a;で宣言すればaはアドレスを持つ(御津凪さんのいう住所です。)わけですが、このアドレスを、ポインタで示してあげて値を呼び出すためのものだ思います。
aの値を出力するには普通にprintfで出力できますよね。
このaをポインタでも呼び出すことができるんです。
int *p_a;とポイント形式で宣言してあげて
ポインタにaの値が格納されてる場所(アドレス:御津凪さんのいう住所)を教えてあげます。
そして、printfで出力する際に、ポインタで、aの場所を出力して!って言えば同じようにaが出力されるわけです。
その際、printf("ポインタからの出力=%d",*p_a); で出力できます。
・・・・なぜポインタを使う必要がある?と聞かれれば理由はありますが、まずはこれから理解した方が良いと思います。