###前提・実現したいこと
現在、柴田望洋先生の新・明解C言語の読み進めを
している所なのですが、ポインターまわりを読んでいる途中で
ふと疑問に思ったので質問したいとおもいます。
ポインタの書き方としての基本ですと
int a = 10;
int *p;
p = &a;
p = 777;
上記のコードを実行すると 変数aのアドレスに対して
777が書き込まれますが
int *p = &a;
と上記のような書き方をしては、だめなのでしょうか?
また
*p = &p = p ←の3つのPは同じ意味でしょうか
初心者ながらに、精一杯考えましたが、自身で納得のいく
答えが得られませんでした。
ご回答をお願い致します。
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
C言語 開発環境 windows7 64bit IDE Eclipse
ここにご自身が実行したソースコードを書いてください
int a[10]; int i = 50; int *p; int *ptr[10]; printf("%p\n",&a[0]); printf("%p\n",&a[1]); printf("%p\n",&i); printf("%p\n",*p); printf("%p\n",&p); printf("%p\n",ptr); printf("%p\n",&ptr[0]); printf("\n"); printf("\n"); printf("------------実験--------------"); printf("\n"); printf("\n"); int test = 100; printf("変数testのもともとの値は・・・%d",test); printf("\n"); int *point_test; point_test = &test; point_test = 10; printf("変数testの値は・・・%d",point_test); printf("\n"); printf("\n"); int test02 = 1000; printf("変数test02のもともとの値は・・・%d",test02); printf("\n"); int *point_test02 = &test02; point_test02 = 777; printf("変数test02の値は・・・%d",point_test02);
###試したこと
現在おさえていること
・ポインタとは アドレスを扱うための3つの機能の総称
・ポインタ型:int型とかdouble型とか
・ポインタ値:アドレス値は同じ意味
・ポインタ変数:よく出てくる *pとか
・ポインタ変数には 2つのモードがある
・int *p ← ポインタ変数モード、アドレス値しかもてない
p ← 通常変数モード これで数字を入れたり計算をすると
ポイントの示す先が書き換わる
###補足情報(言語/FW/ツール等のバージョンなど)
ソースコードの実行結果は以下になりました。
000000000022FE10
000000000022FE14
000000000022FE0C
00000000002F7AD1 //*pのアドレス
000000000022FE00 //&pのアドレス
000000000022FDB0
000000000022FDB0
------------実験--------------
変数testのもともとの値は・・・100
変数testの値は・・・10
変数test02のもともとの値は・・・1000
変数test02の値は・・・777
*pと&pのアドレスがなぜ別々になっているのでしょうか?
回答1件
あなたの回答
tips
プレビュー