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

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

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

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

Q&A

解決済

3回答

4213閲覧

c_str : ポインターを返す

reotantan

総合スコア295

C++

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

0グッド

1クリップ

投稿2015/11/25 23:38

このコードを見て、c_strがポインター先のアドレスを指しているのは分かりますが、c++ plusというサイトでは
c_strはポインターを返すと説明されています。
実際にはポインター先のアドレスを示したいときに、もちろんポインターはアドレスを示しているのですが、ポインターを返すという表現は適切なのでしょうか?

ちょっと気になったので質問させていただきました。

コード // strings and c-strings #include <iostream> #include <cstring> #include <string> int main () { std::string str ("Please split this sentence into tokens"); char * cstr = new char [str.length()+1]; std::strcpy (cstr, str.c_str()); // cstr now contains a c-string copy of str char * p = std::strtok (cstr," "); while (p!=0) { std::cout << p << '\n'; p = std::strtok(NULL," "); } delete[] cstr; return 0; }

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

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

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

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

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

guest

回答3

0

実際にはポインター先のアドレスを示したいときに、もちろんポインターはアドレスを示しているのですが、ポインターを返すという表現は適切なのでしょうか?

少し誤解があると思います。
ポインターはアドレスを保持する変数です。
一般に「ポインターの示すアドレス」と表現する時は char * 等の無いようそのものになると思います。
「ポインターの先に格納されたアドレス」と表現する時は char ** 等の表現になると思います。

c_str() のように char * を返す場合は、ポインタを返すと言う表現で適切です。
char ** を返す場合は、ポインタのポインタを返すと言う表現になります。

投稿2015/11/26 00:00

T.Kanno

総合スコア915

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

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

0

ベストアンサー

「ポインターを返す」という表現は適切と考えます。ポインターとは他の変数のアドレスを値として持っている変数のことですから、「ポインターを返す」ということはその示している他の変数のアドレスを返すということと同義です。
むしろ「ポインター先のアドレス」という表現に違和感を覚えます。「ポインターが指している変数のアドレス」という意味でしょうか? 「ポインター先」という言葉の意味がよくわかりません。

投稿2015/11/25 23:53

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

c_strがポインター先のアドレスを指している

う~ん、「c_strが、アドレスを指す」という表現は意味的にちょっと変なのです。

c_strはポインタ型の変数で、中に入る値が「アドレス」です。
int型の変数には数値が入りますね。それと同じくポインタ型の変数にはアドレスが入ります。
ポインタとアドレスの関係は「容器」と「中身」って考えると良いかも知れません。

この場合の「中身」は情報ですから、普遍的です。例えば、アドレス0x1205acと言う情報は紙に書いてもメモリ中に記録しても、WEBブラウザ上で見えるようにしても全て同じ意味ですから、「アドレス」を指すc_strって意味的にありえません。

ポインターを返すという表現は適切なのでしょうか?

「数値を返却する」ではなくて「int型を返却する」ような表現ってよくあります。
数値と一言で言ってもchar型やshort型double型ってたくさんありますから。

同様に、「アドレスを返却する」ではなくて「◯◯型へのポインタを返却する」ってよく言います。
アドレスの場合も同様で、そのアドレスに記録されている変数も「型」があります。ポインタはそのアドレスに記録されている変数の「型」も含めたポインタ型なので、「アドレスを返却する」よりは「◯◯型への」を省略して「ポインタを返却する」って言うことが多いです。

逆に、もし「アドレスを返却する」と言われたら、私自身はvoid*を返しているって受け取りそうです。

投稿2015/11/26 02:52

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問