目次
現時点では、ポインターの複雑な使用法については話していません。
アドレスが 0x00EFF858 のように見えるのはなぜですか
現時点では、ポインターの複雑な使用法については話していません。
1. ポインタの役割
配列や関数の欠点を補うために、複数または異なるタイプの値を返すことができます。
プログラミングの過程では、データを保存する場合でも、データを取り出す場合でも、メモリ単位を扱う必要があり、コンピュータはアドレスコーディングによってメモリ単位を表現します。ポインタ型は、アドレスコードを格納し、コンピュータのアドレスデータを処理するタイプです。
プログラムの効率を向上させることに加えて、ポインターのより重要な機能は、ある関数が別の関数のローカル変数にアクセスできるようにすること。そのため、ポインターは 2 つの関数間のデータ交換に不可欠なツールです。
2. アドレスの概念とデータ保存の原理
初め
コンピュータのメモリはメモリユニットのアドレスに分割されることを知っておく必要があります。
プログラムを書くとき
int main()
{
int a = 10;
return 0;
}
このうち、変数 a は、a を格納するメモリの 4 バイトのスペース (つまり、4 つのメモリ セル) に適用されます。
住所番号
#include<stdio.h> int main() { int a = 10; printf("%p\n",&a);//将其a的地址打印出来0x00eff858 return 0; }
アドレスが 0x00EFF858 のように見えるのはなぜですか
たとえば、int a=10; a はメモリに 4 バイトを適用します。
0000 0000 0000 0000 0000 0000 0000 1010
16進数に変換すると0x0000000aになります
ポインタ式
#include<stdio.h>
int main()
{
char ah = 10;
char*ah = &ah;//char 说明ah指向的对象是char类型 *说明p是指针变量
return 0;
}
*p 逆参照演算子
#include<stdio.h>
int main()
{
char ah = 10;
char*p = &ah;//char 说明ah指向的对象是char类型 *说明p是指针变量
*p=20//解引用操作符,意思是通过p存放的地址,找到p所指代的对象。所以*p就是p指代的对象。
printf("%d\n",a);
//最后打印出的数字为20
return 0;
}
3. ポインタの可変サイズ
計算に使用できる演算子 sizeof (単位はバイト)
#include<stdio.h>
int main()
{
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(int*));//
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
printf("%d\n",sizeof(short*));
return 0;
}
C/C++ では、ポインター変数のサイズは固定されており、そのサイズはオペレーティング システムとコンパイラーに関係します。具体的には、ポインター変数のサイズは、オペレーティング システムとコンパイラーのビット数に応じて、通常 4 バイトまたは 8 バイトです。
32 ビット オペレーティング システムでは、ポインター変数のサイズは通常 4 バイトですが、64 ビット オペレーティング システムでは、ポインター変数のサイズは通常 8 バイトです。
これは、32 ビット オペレーティング システムのアドレス バス幅が 32 ビットで、最大 2^32 (4 8 ビットまたは 4B) のメモリ ユニットをアドレス指定できるため、ポインタ変数にはアドレスを格納するために 4 バイトが必要です。64 ビット オペレーティング システムのアドレス バス幅は 64 ビットで、最大 2^64 (8 ビットまたは 8B) のメモリ ユニットをアドレス指定できるため、ポインタ変数にはアドレスを格納するために 8 バイトが必要です。
ポインタ変数のサイズはアドレス空間にのみ関係し、それが指すオブジェクトのタイプには関係しないことに注意してください。ポインタ変数が指すオブジェクトの種類に関係なく、そのサイズは固定されています。
サポートされる最大メモリ アドレス空間 32、64 を参照してください。