コンピューティングとストレージのポインタ

ポインタの計算:

解決符号(*&:キャンセルすることができます)

  *バイトの数は、内容を取ります

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。

おすすめ

転載: www.cnblogs.com/1448560633yang/p/11280005.html