1つの変数へのポインタ。
1 int型 A = 5 。 2 int型 * p =&; 3のprintf(" %d個"、* P);
前記ポインタ配列
ポインタ(1)一次元アレイ
1 INT [ 5 ] = { 1、2、3、4、5 }。 2 INT * P; 3 P = 。 4のprintf(" %d個の\ n "、[ 1 ])。 5のprintf(" %d個の\ n "、*(P + 1 ))。 6のprintf(" %dの"、P [ 1 ])。
ポインタ(2)二次元アレイ
(1)カラムポインタ
1 INT [ 3 ] [ 4 ] = { 1、2、3、4、5、6、7、8、9、10、11、12 }。 2 INT * P; 3 // P =&[0] [0]。 4 // P = [0]。 5 P = * 。 6のprintf(" %d個の\ n "、*(p + 4 * 2 + 3))。 // A [I] [J] = *(N * P + IがJ + 1); // 列数nは、アレイ内の 図7のprintf(" %のD "、A [ 2 ] [ 3 ])。
(2)行ポインタ(配列へのポインタ)
1 INT [ 3 ] [ 4 ] = { 1、2、3、4、5、6、7、8、9、10、11、12 }。 2 INT(* P)[ 4 ]。 3 P = 。 4のprintf(" %d個の\ n "、[ 2 ] [ 3 ])。 5のprintf(" %d個"、*(*(P + 2)+ 3))。
3.関数へのポインタ
1 INT メイン() 2 { 3 int型 FUNC(INT A)。 4 INT(* P)(INT A)。 5 int型 A = 5 。 6 P = FUNC。 7 (* P)(A)。 // 调用 8 リターン 1 。 9 } 10 INT FUNC(INT A) 11 { 12 のprintf(" %dの" 、A)。 13 リターン 1 。 14 }
ポインタへ4.ポインタが(時にはフロント*がダウンして無制限の書き込みではないと思った......)
1 int型 A = 5 。 2 のint * p1の、** P2、*** P3; 3 P1 =& 。 4つの P2 =&P1。 5つの P3 =&P2。 6のprintf(" %dの"、*** P3)。
ポインタの配列
1つ のchar *のP [ 3 ] = { " こんにちは"、" "、" 世界" }。 2のprintf(" %sの"、*(P + 2))。
6.リターン関数ポインタ値
1 INT メイン() 2 { 3 のchar *のmyStrcat(チャー * P1を、チャー *のP2)。 4 チャー STR [ 100 ] = " こんにちは" 。 5 のchar *のMES = " 世界" ; 6 のprintf(" %sにする\ n " 、myStrcat(STR、MES))。 7 リターン 1 。 8 } 9 のchar * myStrcat(チャー * P1を、チャー *のP2) 10 { 11 のchar * START = P1。 12 ながら(!* P1 = ' \ 0 ' ) 13 { 14の P1 ++ 。 15 } 16 ながら(* P1 ++ = * P2 ++ ) 17 {} 18 戻り始めます。 19 }
7.ファイルポインタ
FILEの* fpは、
ここでは言葉はあまり厳格です。「Cプログラミング言語(第3版)」によれば、ポインタがアドレスであり、ポインタ変数は、アドレスを格納する変数です。「ポインター」と「タグ」は、異なる概念です。
しかし、ほとんどの場合、「タグ」を直接「ポインタ」と呼ばれます ここで第二の点、6点目、「ポインタ」を参照に加えて、「ポインタ変数」。