ポインタの計算:
解決符号(*&:キャンセルすることができます)
*バイトの数は、内容を取ります
2つのポインタの減算:二つのアドレス間の位相差の単位数。
1単位=のはsizeof(アドレスが指摘)
そして、前の章の概念は、言ったポインタは、いくつかの例を見てみましょう
INT N [5] = {5,3、1、4、2}。
INT * P = N * P1。
P1 =&N [3]。
int型** PP =&P;
coutの<<(int型*)(P1 - n)は、<<てendl; // 00000003
P1点N [3]のアドレス、の代表N N [0]アドレスに
従って、P1 - N =&N [3] - &N [0] = 12 /はsizeof(int型*)= 3。
そこのint *型を変換し、最終的な結果は00000003です
COUT << N [2] +++ ** PP << ENDL。// 6
リア計算するジャーク、N [2] + ** PP; N [2]が1に等しい、** P点P、Pと点N [0]。
したがって、N [2] + ** PP = N [2] + N [0] = 5 + 1 = 6であり、N [2] ++、N [2] = 2;
COUT <<(* P1 == * P + 1)<< ENDL。// 0
P1点N [3]、そう* P1 = N [3] = 4、N [0]乃至P点、そう* P = N [0] = 5、6は1つのプラスに等しいです。
だから、結果は0であります
COUT <<(&P ==&P1)<< ENDL。// 0
アドレスのP1点N [3]のアドレス、n点P [0]は、結果が0である、等しくありません
COUT <<(INT)P1 - (INT)・N [0] << ENDL。
P1点N [3]のアドレスの、(INT)P1 - (INT)・N [0] =(INT)・N [3] - (INT)・N [0] = N [3]、N [0]までの距離、12に等しいです
coutの<< * P + 1 <<てendl; // 6
点p N [0]アドレス、* P + 1 = N [0] +1 = 6。
coutの<<のp - nは<<てendl; // 0
点p nが[0]のアドレスの、だけでなく、アドレスN-N [0]を指すように、PN = 0。
coutの<< * P - (* P1)++ <<てendl; // 1
点p N [0]アドレス、P1点N [3]のアドレス、自宅++、そう* P- * P1 = N [0] - N [3] = 1; nは、P1点[4]。
coutの<< **頁<<てendl; // 5
PP点p、pと点N [0]、そう** PP = N [0] = 5
coutの<< * P1 ***頁<<てendl; // 25
PP点p、pと点N [0]、そう** PP = N [0] = 5、N [4] = 5、P1からポイント結果は25であるので。
2
INT N [5] = {1、2、3、4、5}。
INT * PN [4] = {N&N [2]、N、およびN [0]}。
int型** PPN = PN; // PPNポイントPN [0]
coutの<< ** PPN + 1 <<てendl; // 2
PPN点PN [0]、** PPN = N [0] = 1; 2結果。
coutの<< PPN - &PN [2] <<てendl; // - 2
PPN - &PN [2] =&PN [0] - &PN [2] = -2。
// 0であり; n << ENDL - COUT << [2] PN
PN [2] nを対処するためのポイントを、N、またアドレスを指すので、結果は0です。
coutの<< * PN [2] + 2 <<てendl; // 3
PN [2] =&N [0]、そう* PN [2] + 2 = 1 + 2 = 3。
coutの<< *のpn - n個<<てendl;
また、結果が0になるように、n個のPNのアドレスを指します。
COUT <<(ショート*)PN - (ショート*)(&PN [3])<< ENDL。
PN点PN [0]のアドレスの、(短い*)PN - (ショート*)(&PN [3])=(ショート*)(&PN [0]) - (ショート*)(&PN [3])= - 12;(ショート*)= -12/2 = -6のsizeofで割りました。
COUT <<(ショート*)((CHAR *)PN [1] - (のchar *)&N [3])<< ENDL。
PN [1] =&N [2];(ショート*)((CHAR *)PN [1] - (のchar *)&N [3])=(ショート*)((のchar *)&N [2] - (CHAR *)&N [3])=(ショート*) - 4(转16进制)= fffffffc
char * PCH = "こんにちは、世界!";
COUT <<のsizeof(PCH)<< ENDL; // 4
代表PCHの「Hello World!」と、長さは、一般的に任意の型のポインタ4であります
coutの<< STRLEN(PCH)<<てendl; // 12
「こんにちは、世界!」12個の文字があります。
coutの<<はsizeof(* PCH)<<てendl; // 1
*のPchは、Hの最初の要素を指し、炭化長型1
coutの<< * PCH + 1 <<てendl;
* Hの最初の要素へのPch点; * PCH + 1 = 'H' +1。
coutの<< PCH <<てendl; // "Hello Worldの!"
印刷の "Hello World!"
coutの<<(* PCH)++ <<てendl; //エラー:定数ができません++
coutの<< *&PCH <<てendl; // // PCHの "Hello World!"
印刷の "Hello World!"
COUT <<(CHAR *)(PCH + 1) - PCH << ENDL; // 1
PCH自体は変わっていない、のchar *です
3
するchar * PCH [3] = { "月曜日"、 "APPLE"、 "ハロー"}。
文字** PPCH = PCH;
coutの<< * PPCH <<てendl;
PPCHポイントPCH [0]、そうPPCH = PCH [0] =月曜日。
coutの<< ** PPCH + 1 <<てendl;
PPCHポイントPCH [0]、そう** PPCH = 'M' + 1 = 78。
COUT <<(INT *)(PCH - &PCH [1])<< ENDL。
PCHポイントPCH [0](INT *)(PCH - &PCH [1])=(INT *)(&PCH [0] - &PCH [1])= -1(16進数で回転FFFFFFFF)
COUT << PCH [2] << ENDL。
ハロー印刷
COUT << PCH [2] - * PPCH << ENDL。
PCH [2] - * PPCH =& 'H' - & 'M' = 16。