アプリ版:「スタンプのみでお礼する」機能のリリースについて

ポインタの扱いについて2点ほどありますが教えてください。
質問1:ポインタへの値代入

   short data1[5];
   short *pointa;
    pointa = data1

   (1)*(pointa + 1)=100;
   (2)*pointa + 1 = 100;

  という式があった場合、
   (1)はdata1[1]の配列に100を代入する
   (2)は命令違反的なことでコンパイルエラーが発生する
  という理解でよろしいでしょうか?

質問2:アドレス値の代入

   int var;(varのアドレス値は100番地)
   int *ptr;

   *ptr = &var;
という式があった場合
   ポインタ変数のptrには、番地が入るのではなく、100という数値が入るという判断でよろしいいでしょうか?   

長い質問となっていますので質問1,2どちらか一方でも、余裕のある方がおりましたら両方についてご解答のほどよろしくお願いします。

A 回答 (1件)

質問1:*pointa + 1はコンパイラからすると


(*pointa) + 1
ということになります。
代入式の左辺では計算できません

質問2:文字列として出力した際には人間には100という数値が入ってるように見えますが
実際はアドレスです。
*ptrは”intのポインタ型”です
*ptr=「メモリの」100「番地」
です。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
返信が遅くなりすみません。

質問1の(2)は、*pointa( 割り当てアドレスの中身(データ) )に
1加算して、さらに100を代入しようとしている為、ありえない処理
になる。(コンパイルしたらエラーで弾かれる)という認識でよろしいですか?

質問2については、*ptr( 割り当てアドレスの中身(データ) )に
アドレス100番地を格納するという認識でよろしいですか?

認識の間違いがあればご指摘くださいますよう、お願いします。

お礼日時:2009/11/17 22:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!