Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C++

C++のポインタとは?概念や基本的な使い方をご紹介

投稿日:2021年8月26日 更新日:

 

<目次>

(1) C++のポインタとは?概念や基本的な使い方をご紹介
 (1-1) はじめに
 (1-2) ポインタとは?

(1) C++のポインタとは?概念や基本的な使い方をご紹介

「ポインタ」は一言で表すと「変数の『メモリ上のアドレス』を保持する変数」です。本記事では、そのポインタの構文や使い方の例などをご紹介いたします。

(1-1) はじめに

C++では変数の「メモリ上のアドレス」(データが格納されているメモリ上の位置)を取得するために「&」オペレーターを使用する事が出来ます。例えば次の例で「&fruit」を出力すると「fruit」という変数のアドレスが使えます。
 
(図110)
 
(例)
 
string fruit = "Apple";
//# stringの「値(Apple)」を出力
cout << fruit;
//# stringの「アドレス(006FFA94)」を出力
cout << &fruit;
 
(図111)

(1-2) ポインタとは?

それに対して、ポインタは変数の「メモリ上のアドレス」を保持する変数です(「&」を付けずとも、元々変数の値ではなくアドレスを保持)。
 
ポインタ値は変数と同じデータ型(「int」や「string」)に「*」オペレーターを付与して定義されます。そして、使用している変数のアドレス値(例:「&fruit」)をそのポインタに格納します。
 
(図120)
(お作法)
・「[データ型]* [変数名]」の形式で記述(例:string* fruit)
・代入するアドレスのデータ型は、ポインタの型と同一にする必要あり
 
(例)
下記の例では、string型のポインタとして「fruit_pt」を定義しており、string型の変数「fruit」のアドレス値を受け取っています。その際に前に&を付けて「&fruit」の形でポインタに代入します。
 
//# 通常の変数定義
string fruit = "Apple";

//# ポインタの定義
//# ポインタの名前:fruit_pt
//# ポインタに格納するアドレス:&fruit
string* fruit_pt = &fruit;

//# 変数の出力
cout << fruit << endl;

//# 変数のメモリアドレスの出力
cout << &fruit << endl;
	
//# ポインタが保持するアドレスを出力
cout << fruit_pt << endl;

//# ポインタの参照する値を出力
cout << *fruit_pt << endl;
 
(図121)
 
(備考)
ポインタの宣言における「*」の位置は少しルールが緩く、次のようなパターンが許容されますが、「string*」のように型のすぐ後ろに付ける方が混同が少なく望ましいです。
 
//# 以下はいずれも同じ意味
string* fruit_pt;
string *frui_ptt
 

Adsense審査用広告コード


Adsense審査用広告コード


-C++

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C++のlocaltime関数がスレッドアンセーフである理由と使用上の注意点

  <目次> (1) C++のlocaltime関数がスレッドアンセーフである理由と使用上の注意点  (1-1) localtime関数がスレッドアンセーフである理由  (1-2) loca …

C++のtime関数とlocaltime関数の違いについて

  <目次> (1) C++のtime関数とlocaltime関数の違いについて  (1-1) C++のlocaltime関数の概要とサンプル  (1-2) C++のtime関数の概要とサン …

C++の動的メモリ割当と静的メモリ割当の違いについて

  <目次> (1) C++の動的メモリ割当と静的メモリ割当の違いについて  (1-1) 静的メモリ割当てとは?  (1-2) 動的メモリとは?  (1-3) 動的メモリの割当て  (1-4 …

C++のtime関数やtime_t型の使い方について

  <目次> (1) C++のtime関数やtime_t型の使い方について  (1-1) C++のtime関数とtime_t型とは?  (1-2) C++のtime_t関数のサンプル (1) …

C++の「int **g = new int*;」の意味について

  <目次> (1) C++の「int **g = new int*;」の意味について  (1-1) 「int **g = new int*;」の意味  (1-2) サンプルで理解を深める …

  • English (United States)
  • 日本語
Top