掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29353

ポインタ
投稿者---ジャス(2006/12/30 10:02:30)


#include<stdio.h>

void smp(int,int*);

int main()
{
int a = 10,b=20;

smp(a,&b);
printf("a=%d b=%d",a,b);
return 0;
}

void smp(int a, int *b)
{
a++;
*b++;
}


というプログラムがあり、
出力結果は

a=10 b=20
となるのですが、なぜこのような結果になるのか、図を用いて説明する場合、どのような図で説明すればいいのでしょう。

分かる方いらっしゃいましたら是非教えてください!


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタ 29354 iijima 2006/12/30 10:18:12
<子記事> Re:ポインタ 29355 2006/12/30 11:17:44


No.29354

Re:ポインタ
投稿者---iijima(2006/12/30 10:18:12)


> 出力結果は
> a=10 b=20
> となるのですが、なぜこのような結果になるのか、

smp関数の定義を見れば自ずから明らかです。

もし、

*b++

とした結果が"b=21"になることを期待したのに"b=20"となったことを疑問視して
いるのであれば、演算子の優先順位について調べてください。

ポインタが指している値を取り出す「*」とインクリメント演算子「++」のどちら
が先に行われるのかという問題です。


> 図を用いて説明する場合、どのような図で説明すればいいのでしょう。

上記問題をどう図解すれば良いのか私には分からないので、これはパスさせてください。

# 掲示板利用宣言を遵守した投稿を望みます。


この投稿にコメントする

削除パスワード

No.29355

Re:ポインタ
投稿者--- (2006/12/30 11:17:44)


> *b++;

は、

b = b + 1; /* ポインタをインクリメント */
*b; /* ポインタが指す先を参照(実質的な意味はない) */

の2行と同じ意味です。

*b = *b + 1;

と同じ意味ではありません。
後の方と同じ意味にする場合は、

(*b)++;

としてください。



この投稿にコメントする

削除パスワード

No.29356

Re:ポインタ
投稿者---ジャス(2006/12/30 16:48:09)


ありがとうございます。意味はよくわかりました!

ただどのように説明したら一番相手に分かりやすいのでしょうか。

図もよくわからないですよね(^^;)


この投稿にコメントする

削除パスワード

No.29358

Re:ポインタ
投稿者---rvr_driver(2006/12/30 19:27:58)


>ありがとうございます。意味はよくわかりました!
>
>ただどのように説明したら一番相手に分かりやすいのでしょうか。

iijimaさんの説明にあるとおり演算子の優先順位を説明すればいいのでは?
iijimaさんの回答内容をNo.29355 さんが具体的に説明しているだけです。

本当に意味がわかったのですか?
人に説明できないのであれば本当の意味で解ったとは言えません。

あえて言うなら演算子の優先順位の表を使って説明したほうが
解りやすいと思います。
14−5.演算子の優先順位と結合規則


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧