[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
880(5): デフォルトの名無しさん [] 2017/07/09(日) 16:06:32.28 ID:EeQkMvgZ(1/4) AAS
ポインタそのものにオブジェクトってできるんでしょうか?
例えば、配列arrayのアドレスをポインタpで、ポインタpのアドレスをポインタpのポインタppで調べたんですが、
int array[3];
int *p = array;
int **pp = &p;
for(i = 0; i < 3; i++)
{
printf("&array[%d] : %d : %d\n", i, &array[i]);
}
&array[0] : 2293472
&array[1] : 2293476
&array[2] : 2293480
&p[0] : 2293472
&p[1] : 2293476
&p[2] : 2293480
&pp[0] : 2293468
&pp[1] : 2293472
&pp[2] : 2293476
ppが参照しているpのオブジェクトの位置が、arrayのオブジェクトのアドレスと全く同じ位置にあります。
1つのアドレスが2つのオブジェクトをもてるのか、ポインタ自体にオブジェクトは生成されないのか
他の要素でそうなってるのかわかりません。どなたか回答宜しくお願いいたします。
884: デフォルトの名無しさん [] 2017/07/09(日) 16:43:15.93 ID:EeQkMvgZ(2/4) AAS
>>881 これでいいでしょうか?
int i;
int array[5];
int *p = array;
int **pp = &p;
printf("array : %d\n", array);
for(i = 0; i < 5; i++) {
printf("&array[%d] : %d\n", i, &array[i]);
}
printf("p : %d\n", p);
for(i = 0; i < 5; i++) {
printf("&p[%d] : %d\n", i, &p[i]);
}
printf("pp : %d\n", pp);
for(i = 0; i < 5; i++) {
printf("&pp[%d] : %d\n", i, &pp[i]);
}
>>882&ppでpのオブジェクトのアドレスを取得できると思ってたんですが違ったんですか?
>>883883(1): デフォルトの名無しさん [sage] 2017/07/09(日) 16:25:25.83 ID:3Luqddjj(1/3) AAS
一つのポンタを複数のオブジェなんて当たり前
int z;
int * p = &z;
int * p2 = p;
int * p3 = p2;
すいませんまだそれを理解するのは難しいです。
886(1): デフォルトの名無しさん [] 2017/07/09(日) 16:51:56.41 ID:EeQkMvgZ(3/4) AAS
>>885885(1): デフォルトの名無しさん [sage] 2017/07/09(日) 16:44:50.47 ID:3Luqddjj(2/3) AAS
何がわからんのや。ようわかるやんけ
アドレス : オブジェクト : 値 : オブジェクトの型
2293464 : pp : 2293468 : int**型
2293468 : p : 2293472 : int*型
2293472 : array[0] : ? : int型
2293476 : array[1] : ? : int型
2293480 : array[2] : ? : int型
つまりポインタpは配列を参照してもp自体は配列型ではなくて単体(?)のオブジェクトだということでしょうか?
888: デフォルトの名無しさん [] 2017/07/09(日) 17:01:52.64 ID:EeQkMvgZ(4/4) AAS
>>887ありがとうございます!5時間以上つまってたのが一気にクリアになりました!
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s