ポインタ

ポインタ (pointer) とは、論理的位置情報を参照(特定のメモリ領域を表現する)するものです。
C言語では特定のメモリ領域への値の直接代入能力を持つなど、他のプログラミング言語と比較して、異例とも言える強力なポインタ機能を備えています。

C言語の実行モデルでは、実行プログラム上の関数コード、データが全て1次元のアドレスに直列配置されます。
そのため、データはおろか、関数のアドレスを取得し、他の関数にエントリーポイント情報として渡すことが可能です。

また、C言語の関数では、引数は、値渡しをサポートしていますが、参照渡しをサポートししていません。
これは、アドレスの数値を取得すれば、参照に可能な全てを行えるため、実質的に参照を数値と同一視できるからです。


ポインタ変数の宣言

ポインタ変数とは、アドレスを保存するための変数のことを言います。
変数のアドレスを表現する場合、次のように記述します。

データ型名 *ポインタ変数名;

このポインタ変数にアドレスを代入することで通常の変数と同じように利用することが出来ます。
ポインタ変数に変数のアドレスを代入する場合、次のように記述します。

ポインタ変数名 = &変数;

ポインタ変数を使用した記述例

// アドレス演算子 program in C.    
#include <stdio.h>    
    
int main(int argc, char *args[])
{        
    int i = 5;          // 整数    
    int *p;             // ポインタ
        
    p = &i;
    i += 100;
    printf("0x%08x,%d,%d\n", p, *p, i);
                
    *p += 100;
    printf("0x%08x,%d,%d\n", p, *p, i); 
        
    return 0;
}

アドレス代入元変数の値を変更した場合、ポインタ変数側から参照する値も変更されます。
また、ポインタ変数側の値を変更した場合も同様に代入元の変数の値が変更されます。

実行結果

0x00b2f7d0,105,105
0x00b2f7d0,205,205


Last updated:2017/05/28
Author:efn

';