[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)ポインタは、メモリアドレスに直接アクセスできるので、注意して使用する必要があります.
Reference
この問題について([CS study]ポインタ), 我々は、より多くの情報をここで見つけました
https://velog.io/@younara/CSstudy-포인터
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
int *a = 0x33484735;
*a = 0; // 주소값이 달라진다.
#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이 출력됨
}
Reference
この問題について([CS study]ポインタ), 我々は、より多くの情報をここで見つけました https://velog.io/@younara/CSstudy-포인터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol