資料集
ここはhideyosiの学習帳です。いろいろな資料を集めたり整理したりしています。オイラ用のノートなので間違っていたり未完成だったりしますので信用度は相当低いことをあらかじめご了承くださいませ。
4: 2007-03-25 (日) 13:24:32 ソース バックアップ No.4 を復元して編集 5: 2007-03-26 (月) 20:58:43 ソース バックアップ No.5 を復元して編集
Line 72: Line 72:
   *p = 0x30;                    しちゃうと早いと思う)    *p = 0x30;                    しちゃうと早いと思う)
 }  }
 +
 +
 +*ポインタの演算 [#ua4ea2a7]
 +
 +アドレス変数(ポインタ)は演算はできるのだろうか?
 +
 +''結論:''
 +~
 +COLOR(blue){アドレス変数(ポインタ)は、演算・計算はできない!}
 +
 +
 +''なぜ??:''
 +~
 +COLOR(blue){''数値''じゃないから!!}
 +
 +
 +こんな例を考える。
 +-128リットル+8リットルは?
 +-100枚の紙の束が6束。枚数は?
 +-100万円の札束が二つ。これを5人で均等に分ける。一人いくら?
 +
 +これらはみんな成り立ちます。つまり計算ができます。
 +
 +では、これは??
 +-お前の家の住所。3倍にしたらどこの家?
 +-警察に通報したいけど、110番の半分って?
 +-クアトロ大佐のモビルスール百式。二台あったら何式?
 +
 +どれもおかしいですね?。つまり、''数字を使っていても数値じゃない''ものがいっぱいあるのはわかりますね?。
 +
 +アドレス変数(ポインタ)はこれに相当します。一番解りやすいのは文字通り、「これはアドレス、すなわち住所の番地なんだ」と考えるのがいいと思います。住所を足し算したり割り算したりするのはおかしいでしょう?。同じようにアドレス変数(ポインタ)を計算、演算するのはおかしいと考えれば合点がいきますね。
 +
 +-COLOR(red){それはおかしいぞ!オレはこんなのを見たことがある。コンパイルもエラーにならない。計算はできるはずだ!}
 + char *p;
 + p = 0x11223344;
 + p = p + 1;
 +
 +なるほど。これはエラーになりませんね。
 +
 +では。掛け算や割り算はどうですか???
 +
 +・・・そう、エラーになります。
 +
 +「あれれ? ポインタは足し算と引き算だけができる特殊な変数なのか?」
 +
 +なるほど。そういう理解もアリですが、こんな実験をしてみました。
 +
 + char *c;
 + short *s;
 + int *i;
 +
 + c = 0x11111111;
 + s = 0x22222222;
 + i = 0x33333333;
 +
 + c = c + 1;
 + s = s + 1;
 + i = i + 1;
 +
 + printf("c pointer is %d\n",c);
 + printf("s pointer is %d\n",s);
 + printf("i pointer is %d\n",i);


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 4009, today: 1, yesterday: 0