[CS study]ポインタ


ししん


これまで変数自体には、自分に合ったデータ型の値が格納されていた.
ポインタ変数は、メモリアドレスを格納する特殊な変数です.

ポインタコンセプト


ポインタには、変数自体が存在するメモリアドレスの値があります.
従って、以下の例では、aを用いて5という値を検索することができ、ポインタ変数bを用いて5という値を検索することもできる.
int *b = &a;のように,「宣言時」に用いられる*はポインタ変数である.
その後、*bと書く.これは、ポインタ変数bが指すアドレスの値を意味する.
すなわち、上記の例では、値5自体が値である.

ポインタ関連演算子



宣言時と宣言後のポインタ演算子(*)は同じものしか生成されませんが、機能は異なります

実際、int a=5;に示すように、メモリアドレスには次の変数を記録できます.
int型は4バイトを占めるため,1バイトを表すメモリアドレスごとに4バイト必要となる.

ポインタの機能


1)ポインタはコンピュータシステムの特定メモリに直接アクセスできる.
2)したがって、既存の重要メモリ領域にアクセスしないように注意してください.
3)以下のコードは非常に危険なコードである.
int *a = 0x33484735;
*a = 0;  // 주소값이 달라진다. 
4)ポインタは特定のメモリアドレスを含む変数にすぎない.
5)したがって、ポインタは複数使用可能である.
#include <stdio.h>

int main(void) {
	int a = 5;
	int *b = &a;
	int **c = &b;  //포인터 변수를 다중으로 사용
    printf("%d\n", **c); 
	system("pause");
}
ここで待って!
配列とポインタは実は同じです.
配列を宣言すると、その名前自体がポインタ変数と同じと考えられます.
したがって、配列宣言後、ポインタ変数のように名前自体を使用することができます.
次の例
例)
#include <stdio.h>

int main(void) {
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
	int *b = a;
	printf("%d\n", b[2]); //포인터 b변수는 a 배열의 주소값을 가짐
	system("pause"); // 2번째 인덱스에 있는 값인 3이 출력됨 
}
1)ポインタは、メモリ内の変数の位置アドレスを格納します.2)ポインタは、メモリアドレスに直接アクセスできるので、注意して使用する必要があります.