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

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

ただいまの
回答率

87.92%

c_str : ポインターを返す

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 2,699

score 258

このコードを見て、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;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

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

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

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




投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る