1. ポインターの概念 (はじめに)
1. ポインタとは
- ポインタはメモリ内の最小単位の番号、つまりアドレスです。
- 話し言葉におけるポインタは通常、メモリアドレスを格納するために使用される変数であるポインタ変数を指します。
ポインタはアドレスであり、話し言葉でのポインタは通常、ポインタ変数を指します。
すると、このように理解できます。
1. メモリ
ポインタ変数
& (アドレス演算子) を使用して、変数のメモリ開始アドレスを取り出し、そのアドレスを変数 (ポインター変数) に格納できます。
概要: ポインタ変数、アドレスを格納するために使用される変数。(ポインタに格納された値はアドレスとして扱われます)。
2. 記憶(はじめに)
32 ビット マシンの場合、32 のアドレス ラインがあると仮定し、アドレス指定が (1 または 0) のときに各アドレス ラインがハイ レベル (高電圧) とロー レベル (低電圧) を生成すると仮定します。
この場合、32 のアドレス行によって生成されるアドレスは次のようになります。
ここには 2 ~ 32 のアドレスがあります。
各アドレスはバイトを識別するため、アドレス指定用に (2^32Byte == 2^32/1024KB == 2^32/1024/1024MB == 2^/1024/1024/1024GB == 4GB) 4G スペースを与えることができます。
同様に、64 ビット マシンに 64 のアドレス ラインが与えられている場合、8G 空間をアドレス指定できます。
32 ビット マシンでは、アドレスは 32 個の 0 または 1 で構成されるバイナリ シーケンスであり、アドレスは 4 バイトに格納する必要があるため、ポインター変数のサイズは 4 バイトにする必要があります。
64 ビット マシンでアドレス ラインが 64 行ある場合、アドレスを格納するためのポインター変数のサイズは 8 バイトになります。
概要:
ポインタ変数はアドレスを格納するために使用され、アドレスはメモリ ユニットを一意に識別します。
ポインターのサイズは、32 ビット プラットフォームでは 4 バイト、64 ビット プラットフォームでは 8 バイトです。
2. ポインタ型
変数には、整数、浮動小数点などのさまざまな型があります。ポインタには型がありますか?
int main()
{
int* p1 = NULL;//NULL是空指针
char* p2 = NULL;
float* p3 = NULL;
return 0;
}
上記のコードから、ポインターの定義は type + * であることがわかります。
例:
int 型のポインタは、 int型の変数のアドレスを格納するために使用されます
。 char 型のポインタは、char型の変数のアドレスを格納するために使用されます
。 float 型のポインタは、変数のアドレスを格納するために使用されます。 float 型の変数*
3. ポインタの保存
変数はメモリ内に作成され (メモリ内に空間が割り当てられ)、各メモリ単位にはアドレスがあるため、変数にもアドレスがあります。次のように変数アドレスを取り出します。
#include <stdio.h>
int main()
{
int num = 10;
#//取出num的地址
//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf("%p\n", &num);//打印地址,%p是以地址的形式打印
return 0;
}
アドレスを格納するには、ポインタ変数を定義する必要があります。
int num = 10;
int *p;//p为一个整形指针变量
p = #
ポインターの使用例:
#include <stdio.h>
int main()
{
int num = 10;
int *p = #
*p = 20;
return 0;
}
4 番目に、ポインタ変数のサイズ
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
結論: ポインターのサイズは、32 ビット プラットフォームでは 4 バイト、64 ビット プラットフォームでは 8 バイトです。