ポインタについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ライン

ポインタについて

#1

投稿記事 by ライン » 17年前

#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:ポインタについて

#2

投稿記事 by 御津凪 » 17年前

ポインタとはアドレス、つまり、値の住所を格納することができる型です。

家の住所がこれに当たるでしょう。

上記のコードでは、 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 )にしています)

array

Re:ポインタについて

#3

投稿記事 by array » 17年前

先越されましたが一応書いたので(^^;

御津凪さんと同じような事しか言ってませんけど。文で説明してるので読む気になれば、読んでください。



この前本屋でみたのですが、ポインタや配列を覚えるのは「Cの絵本」ってやつが、とても分かりやすかったです。

プログラムの考えみたいのが、絵を使いとてもわかりやすく解説してくれてます。あまり詳しく見てませんが、多分システム的な意味でも理解できるような気がします。


>上記のプログラムが本を見ながらやったのですが、ポインタの意味がよくわからないです。

なんか大雑把すぎて何を説明して良いのか分かりませんが

ポインタの意味としては、int a;で宣言すればaはアドレスを持つ(御津凪さんのいう住所です。)わけですが、このアドレスを、ポインタで示してあげて値を呼び出すためのものだ思います。

aの値を出力するには普通にprintfで出力できますよね。

このaをポインタでも呼び出すことができるんです。

int *p_a;とポイント形式で宣言してあげて

ポインタにaの値が格納されてる場所(アドレス:御津凪さんのいう住所)を教えてあげます。

そして、printfで出力する際に、ポインタで、aの場所を出力して!って言えば同じようにaが出力されるわけです。

その際、printf("ポインタからの出力=%d",*p_a); で出力できます。


・・・・なぜポインタを使う必要がある?と聞かれれば理由はありますが、まずはこれから理解した方が良いと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る