『Objective-Cプログラミング』9.アドレスとポインタ
3861 ワード
アドレスとポインタ 1バイト(byte)=8ビット(bit) メモリには数値番号があり、通常はアドレス(address)で特定のバイトのデータを指す. 32ビットCPUまたは64ビットCPUは、実はアドレスの大きさを指す.一方、64ビットCPUは32ビットCPUよりもアドレッシング能力が高い.
アドレスの取得変数のアドレス:メモリのある場所を指し、その位置のメモリに変数の値が保存されている. 通常、メモリアドレスは16進数で出力されます.
出力結果:
i stores its value at 0x7fff5fbff79cプログラムがコンピュータ上で実行されると、関連するすべてのデータがメモリに保存され、それぞれのアドレスがあります. 関数にも独自のアドレスがあります.関数の関数名によって、対応する関数のアドレスが得られます.
出力結果:
this function starts at 0x100000d10
ししんポインタは、特定のタイプの変数でメモリアドレスを保存します. ポインタの意味:プログラムは必ずしもコピーによってデータを伝達できるとは限らないが、データの開始アドレスを直接伝達したりコピーによって伝達したりすることができるに違いない.データの先頭アドレスがあれば、対応するデータに容易にアクセスできる. ポインタの宣言方式:例 は、 演算子の役割: 宣言ポインタ; 参照:ポインタによってアドレス内のデータにアクセスします. 指定されたアドレスにデータを保存する.
出力結果
i stores its value at 0x7fff5fbff79c
the int stored at addressOfI is 17
Now i is 89
異なるタイプのデータに使用されるバイトサイズ
出力結果:
An char is 1 bytes
An short is 2 bytes
An int is 4 bytes
An long is 8 bytes
An float is 4 bytes
An double is 8 bytes
A pointer is 8 bytes
An int is 4 bytes
A pointer is 8 bytes
このプログラムを実行するプロセッサ(CPU)のビット数は、ポインタの占有バイトサイズを見て逆方向に判断することができる.ポインタの長さが4バイトの場合、プログラムを実行するプロセッサは32ビットである.ポインタの長さが8バイトの場合、プロセッサは64ビットです.の範囲で、保存できる最小数と最大数 データ型
ビット数
さいしょうすう
最大数
char
8ビット
-128
127
Unsigned char
8ビット
0
255
short
16ビット
-32768
32767
Unsigned short
16ビット
0
65535
NULL「空」ポインタ:場合によっては、アドレスを保存できるポインタ変数が必要ですが、ポインタがアドレスを指していないことを明確に示す値を割り当てます.C言語の は、
ifの条件式では、ポインタが空かどうかを判断します.
出力結果:
**myPointer**はNULLです.
**myPointer**はNULLです.
アドレスの取得
&
演算子により、変数のアドレスが得られる.%p
は、メモリアドレスのフォーマット説明子である.int i = 17;
printf("i stores its value at %p
",&i);
出力結果:
i stores its value at 0x7fff5fbff79c
printf("this function starts at %p
",main);
出力結果:
this function starts at 0x100000d10
ししん
NSString *a
;*
演算子を使用して、あるアドレスに保存されたデータにアクセスすることができる.int i = 17;
// * , addressOfI int *, int
int *addressOfI = &i;
printf("i stores its value at %p
",addressOfI);
// * addressOfI int
printf("the int stored at addressOfI is %d
",*addressOfI);
// * ,
*addressOfI = 89;
printf("Now i is %d
",i);
出力結果
i stores its value at 0x7fff5fbff79c
the int stored at addressOfI is 17
Now i is 89
異なるタイプのデータに使用されるバイトサイズ
sizeof()
は、あるデータ型のサイズを得ることができる.sizeof()
はsizeというタイプを返します.tの数、それに対応するフォーマット説明子は:%zu
;// sizeof()
printf("An char is %zu bytes
",sizeof(char));
printf("An short is %zu bytes
",sizeof(short));
printf("An int is %zu bytes
",sizeof(int));
printf("An long is %zu bytes
",sizeof(long));
printf("An float is %zu bytes
",sizeof(float));
printf("An double is %zu bytes
",sizeof(double));
printf("A pointer is %zu bytes
",sizeof(int *));
// sizeof() ,
printf("An int is %zu bytes
",sizeof(i));
printf("A pointer is %zu bytes
",sizeof(addressOfI));
出力結果:
An char is 1 bytes
An short is 2 bytes
An int is 4 bytes
An long is 8 bytes
An float is 4 bytes
An double is 8 bytes
A pointer is 8 bytes
An int is 4 bytes
A pointer is 8 bytes
このプログラムを実行するプロセッサ(CPU)のビット数は、ポインタの占有バイトサイズを見て逆方向に判断することができる.ポインタの長さが4バイトの場合、プログラムを実行するプロセッサは32ビットである.ポインタの長さが8バイトの場合、プロセッサは64ビットです.
ビット数
さいしょうすう
最大数
char
8ビット
-128
127
Unsigned char
8ビット
0
255
short
16ビット
-32768
32767
Unsigned short
16ビット
0
65535
NULL
NULL
はここの「ある値」である.NULL
は0です.NULL
がここでは空の値であることを示す場合がある.nil
およびNULL
は等しいが、Objective-Cのプログラマーは、通常、このアドレスにオブジェクトがないことを表すためにnil
を使用する.ifの条件式では、ポインタが空かどうかを判断します.
float *myPointer;
if (myPointer) {
// myPointer , myPointer != NULL
printf("myPointer NULL.
");
}else {
printf("myPointer NULL.
");
}
//
if (myPointer != NULL) {
printf("myPointer NULL.
");
}else {
printf("myPointer NULL.
");
}
出力結果:
**myPointer**はNULLです.
**myPointer**はNULLです.