質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1551閲覧

Char * * * 型の値の取得方法

saito.kaz

総合スコア76

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/03/31 05:54

###前提・実現したいこと
前回の質問で、char * と char * *, char * * * について質問致しました。

char * * * str にはアドレスが入っていると思いますが、このアドレスに格納されている値を取得するにはどのようにすれば良いのでしょうか。

通常のように、 str * で値は表示されますでしょうか。

###補足情報(言語/FW/ツール等のバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

変数宣言のポインタ型を示す[]と
ポインタ変数が示す先を参照する演算子の[
]と
四則演算の掛け算の演算子である[*]と
明確に区別できていますか?

また、1段階のポインタと、2段階以上の多重ポインタとしっかり理解できていますか?
ポインタ型変数にはアドレスが格納されるということを理解できていますか?

typedefを使うと多重ポインタをうまく隠蔽できます。
こういったコードの書き換えをシームレスにできるようになれば、さらに理解できるようになるのではと思います。

typedef char * PCHAR; typedef PCHAR STRING; typedef STRING * PSTRING; // --- typedef char ** PSTRING; void function1(STRING s) { // --- char* s printf("%s", s); } void function2(PSTRING ps) { // --- char ** ps function1(*ps); } void function3(PSTRING * pps) { // --- char *** pps function2(*pps); } int main(void) { char *a = "Hello Word!"; STRING s = a; // char * s = a; PSTRING ps = &s; // char ** ps = &s; function3(&ps); }

投稿2016/03/31 08:24

MasafumiOkamoto

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saito.kaz

2016/03/31 11:17

ありがとうございます。
guest

0

こんにちは。

C++

1std::cout << str << "\n";

で、strに入っているアドレスが表示されますよ。

投稿2016/03/31 06:35

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saito.kaz

2016/03/31 11:17

ありがとうございます。
saito.kaz

2016/03/31 11:17

ありがとうございます。
guest

0

ベストアンサー

まだ理解されていないようですね…
char ***str のアドレスは **str です
*str だと char ***str のアドレスが入ってる場所のアドレスです
strchar ***str のアドレスが入ったアドレスが入ったアドレス…
char ***strの値を表示するのなら***strです
※もちろん値を参照するまえには必ずその実態(アドレス)を設定しておかねばなりませんよ

蛇足ですが質問には str * と記載がありましたがこの * はポインターとしてのマークではなく乗算の演算子になってしまいます…もちろんその後にかける値が何か必要になりますが…
ただ仮にstr * の後にかける値が何か続いて掛け算の体裁が整ってもstrはアドレス(char ***strのアドレスのアドレスのアドレス)なのでそのまま乗算に使う事はできないですが…

投稿2016/03/31 06:18

編集2016/03/31 06:20
HiroshiWatanabe

総合スコア2160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saito.kaz

2016/03/31 11:17

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問