【C++/C言語】文字列リテラルをポインタ const char* で扱う方法

目次

はじめに

C++やC言語において、"Welcome" のような、ダブルクォーテーションで囲まれた文字列(文字列リテラル)は、プログラムの特別な読み取り専用メモリ領域に格納されます。

このような文字列リテラルをプログラムで扱う際、その文字列が格納されているメモリの先頭アドレスを指し示す「ポインタ」を利用するのが一般的です。この記事では、文字列リテラルを指すポインタ const char* の基本的な使い方を解説します。


const char* を使ったサンプルコード

このコードは、const char* 型のポインタを宣言し、文字列リテラル "Hello, World!" で初期化します。その後、ポインタを使ってその文字列を画面に出力します。

完成コード

#include <iostream>

using namespace std;

int main() {
    // 1. const char* 型のポインタを、文字列リテラルで初期化
    const char* message = "Hello, World!";
    
    // 2. ポインタをcoutに渡して、文字列全体を出力
    cout << message << endl;
    
    return 0;
}

実行結果

Hello, World!

コードの解説

const char* message = "Hello, World!";

この一行は、2つの重要なことを同時に行っています。

  1. 文字列リテラルの配置: コンパイラは、"Hello, World!" という文字列(と終端NULL文字 \0)を、プログラムの読み取り専用のメモリ領域に配置します。
  2. ポインタの初期化: const char* 型のポインタ変数 message を宣言し、そのポインタに、先ほどメモリに配置された文字列の先頭文字 H のアドレスを格納します。

const の重要性

const は、このポインタを通じて、指し示している先のデータを変更しない、という宣言です。

  • const char*: 「char 型の定数(変更不可な文字)を指すポインタ」 文字列リテラルは読み取り専用領域にあるため、*message = 'h'; のようにポインタ経由で内容を書き換えようとすると、コンパイルエラーになるか、実行時にプログラムがクラッシュします。const を付けておくことで、このような危険な操作をコンパイラが事前に防いでくれます。

cout << message << endl;

cout は、char* 型(または const char* 型)のポインタを渡されると、そのアドレスから始まって、終端NULL文字 \0 が現れるまでの全ての文字を画面に出力する、という特別な動作をします。


まとめ

今回は、C++やC言語におけるC言語スタイルの文字列リテラルの基本的な扱い方として、const char* ポインタを使う方法を解説しました。

  • 文字列リテラルは、読み取り専用メモリに格納される。
  • const char* 型のポインタで、その文字列リテラルの先頭アドレスを指し示す。
  • const を付けることで、読み取り専用データを誤って変更しようとするのを防ぐことができる。

C++では std::string クラスを使う方がはるかに安全で便利ですが、関数の引数などでC言語スタイルの文字列を扱う場面は依然として多く、この const char* の仕組みを理解しておくことは非常に重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次