C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。
Q&A
解決済
2回答
5183閲覧
総合スコア7
0グッド
0クリップ
投稿2017/10/17 11:45
0
ポインターの指す意味の違いがいまいちわかりません。
**p (*p)[]
この2つはどう違うのでしょうか
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
2017/10/17 11:55
回答2件
ベストアンサー
こんにちは。
たぶん、pがポインタへのポインタなんですよね? であれば、yumetodoさんが書かれている通りです。
C++1int data[]={10, 20, 30}; 2int* pp=data; 3int** p=&pp; 4std::cout << **p << " == " << (*p)[0] << "\n";
C++
1int data[]={10, 20, 30}; 2int* pp=data; 3int** p=&pp; 4std::cout << **p << " == " << (*p)[0] << "\n";
つまり、ppはint型配列へのポインタで、pはそのppへのポインタです。 なので、(*p)はppと同じものですから、int型へのポンタです。 従って、(*p)[0]はpp[0]と同じものなので、これはdata[0]となります。 同様に、**pは*(*p)なので、*ppです。これはdata[0]となります。
(*p)
pp
(*p)[0]
pp[0]
data[0]
**p
*(*p)
*pp
投稿2017/10/17 13:07
総合スコア23272
c1typedef int* int_ptr; 2int a_v[3] = { 1, 2, 3 }; 3int_ptr a[3] = { &a_v[0], &a_v[1], &a_v[2] };// int*[3] 4 5int v1 = **a; 6int v2 = (*a)[0]; 7 8bool aa = (v1== v2);// => true
c
1typedef int* int_ptr; 2int a_v[3] = { 1, 2, 3 }; 3int_ptr a[3] = { &a_v[0], &a_v[1], &a_v[2] };// int*[3] 4 5int v1 = **a; 6int v2 = (*a)[0]; 7 8bool aa = (v1== v2);// => true
投稿2017/10/17 12:39
総合スコア5850
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.50%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
ポインターの指す意味の違い