std::cout << p と std::cout << *p の違いは?
VC++でコードを書きながらC++を学んでいます。
ポインタで疑問に思ったことがあるので質問させて下さい。
int* p;
int n = 100;
p = &a;
上記のように変数を宣言・代入した場合、
std::cout << p と std::cout << *p のどちらでも"100"と表示されます。
これら二つの違いは何でしょうか?
本来*pとすべきところをpにしてもVC++が気を利かせて
&pのアドレスに入っているデータを表示してくれているということでしょうか?
No.3ベストアンサー
- 回答日時:
No.1氏の回答にあるコードを元に答えます。
>この場合&pでもアドレスが表示されると思うのですが、
>「&p」と「p」の違いは何でしょうか?
pはaのアドレス。
&pはpのアドレス。
(「p = &a」では、どこのアドレスを渡しているのか考えてみて下さい)
「&p」と「p」の違いというのが参照とポインタの違いを聞いているのだとしたら、constのポインタ==参照型で良かったと思います。
p = &a; //OK
&a = p; //error
int* const p2 = p;
p2 = &a; //error
「pはaのアドレス。
&pはpのアドレス。」
上の回答がまさに希望のものでした。
グダグダな質問に二度も回答して下さったことに感謝します。
「&a」と「&p」が同じ値を返しているという勘違いをした上での質問だと気付きました。
こんな質問をして皆さんすみませんでした。
No.4
- 回答日時:
「p」「*p」「&p」の違いでしたら
p の値 &n
p の値のアドレスが持つ内容 n
*p
*pの値 *p
*p の値が持つ値 &n
*"pの値が持つ値"が持つ内容 n
&p
&pの値 &p
&pのアドレスが指す値 &n
&pのアドレスが指す値が指す内容 n
日本語が下手で分かりにくくなってますが。
*pはポインタのポインタなので
*pと&pはほとんど同じです。
ポインタ型での宣言なので
*p、**p、&*pの違いってことになりますね。
>> pというポインタにアドレスを代入した後の「p」と「&p」と「*p」の違いです。
ポインタにアドレスを代入する前でも後でも、持ってる役割は一緒です。
初心者にとって有難い解説をどうもありがとうございます。
「*pはポインタのポインタなので
*pと&pはほとんど同じです。
ポインタ型での宣言なので
*p、**p、&*pの違いってことになりますね。」
30分くらい考えましたがこのへんがよく分からないので、まだまだ自分は勉強不足みたいです。
せっかく頂いた解説なので折に触れて再チャレンジしてみます。
ありがとうございました。
No.1
- 回答日時:
とりあえず, 「きちんとコンパイルできる」ようなプログラムを出してください.
この回答への補足
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
int* p;
int a = 100;
p = &a;
std::cout << p;
while(1);
return 0;
}
全文だと上のようにしたですが、今実行してみるとコンソールにアドレスが表示されました。
この質問で何が知りたかったというと、pというポインタにアドレスを代入した後の
「p」と「&p」と「*p」の違いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
セグメントエラー
-
fopne で失敗する原因
-
c言語で任意のファイルから読み...
-
C言語でのconstを返す関数
-
【なぜポインタを使うのか】
-
main(int argc,char **argv[])...
-
nullポインタを逆参照とは?
-
構造体を値で渡す良い点はあり...
-
【C言語】戻り値が構造体の関数
-
関数ポインタの高速化のメリット
-
自作strcat
-
アプリを32bitから64bit移行
-
popenした子プロセスのプロセス...
-
C言語によるメモリ読み書き
-
JavaとC++はどう似てる?
-
ハンドル、アドレス、ポインタ...
-
c言語のポインタについて初心者...
-
キャストについて str = (CStr...
-
リトルエンディアンというもの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Cで作成したDLL関数をVBから呼...
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
構造体とfscanf
-
c言語で任意のファイルから読み...
-
デバイスハンドルとは?
-
main(int argc,char **argv[])...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
C言語の関数と配列に関する質問
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
おすすめ情報