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

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

関連記事

no image

C++で「error: cannot initialize a variable of type ‘const unsigned char’ with an lvalue of type ‘const char [x]’」が発生した時の原因と対処

<目次> (1) C++で「error: cannot initialize a variable of type ‘const unsigned char’ with an …

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

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

Valgrindで行番号を表示させる方法

  <目次> (1) Valgrindで行番号を表示させる方法  (1-1) 行番号を表示させる方法  (1-2) (参考)「-g」オプションについて (1) Valgrindで行番号を表示 …

C++の「->」(アロー演算子)とは?意味や使い方をご紹介

  <目次> (1) C++の「->」(アロー演算子)とは?意味や使い方をご紹介  (1-1) C++の「->」(アロー演算子=arrow operator)とは?  (1-2) …

C++で発生した「 _CrtIsValidHeapPointer(block)」と「is_block_type_valid(header->_block_use)」エラーについて

  <目次> (1) C++で発生した「 _CrtIsValidHeapPointer(block)」と「is_block_type_valid(header->_block_use) …

  • English (United States)
  • 日本語
Top