スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

あいやがポインタについてなんか言ってます。


いつも「*p」←をポインタって言ってるけど、 *←がポインタなのではなくて、 pがポインタ変数なんだよね。 「*」は間接アクセス演算子、ポインタ自体ではない。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日


これがわかってればポインタは友達だね。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日


「p」は他の場所のアドレスを格納する変数、 他の場所のアドレスを表すものに 他の場所へアクセスするためのものを付加すると 他の場所へアクセスできる。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

つまり*p1と*p2があったとして、 p1の値がアドレス0x0001、 p1の値がアドレス0x0002。 0x0002にあるデータが「10」だとすると、 *p1 = *p2 で行っていることは 0x0001 = 10。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

そして p1 = p2とすると、 p1 = 0x0002になる。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

aという変数が0x0003にあったとして、 *pに0x0003を入れたいならば、 p = &aとする。 そうすると&aが0x0003に変換されて代入される(イメージ)。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

ところがポインタ宣言と混ざると段階層がズレるから最初の頃は混乱する。 int型ポインタpを宣言しつつ代入しようとすると int *p = &a になる。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

これ、そもそも int* p = &a; と書いておけばわかるかもしれない。 int*「p = &a」; int型pにaのアドレスを代入、と。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

あとは&aつまりpの持つ場所に値を書き込みたいならば、 間接的にアドレスにアクセスするための演算子「*」を付加するだけ。 *p = 10; printf("%d\n", a); // 10
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

ダブルポインタはポインタ変数のアドレスの値が持つアドレスにアクセスするための演算子、 つまりダブルポインタはpのアドレス(仮に0x0004とでも)を受け入れる箱。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

int** pp = &p; printf(**pp);
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

トリプルポインタでアドレスppなら ppp = &pp;
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

いえすっ!!おーけー!! 。
返信
リツイート
お気に入りに登録
開く
ポインタスター☆あいや ‏@aiya000 11月18日

スポンサーサイト

コメント

非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。