図1は、簡単に言えば、ポインタはアドレスがアドレスであることを示し
1の#include <stdio.hの> 2 3。 ボイド(メイン){ 4。 INT NUM = 1 ; 5 のprintf(" NUM値=%dはNUMアドレスP%= \ N- "、NUM、&NUM); 6 // 図1に示すように、可変アドレスの出力は、フォーマット%のP用いた場合 7。 // 2、&NUMするアドレスに対応する撮影したNUM変数を表している 8。 9。 10 INT * PTR =&NUM; // 、ポインタのポインタを定義する 。11 のprintf(" PTRアドレスは、アドレス%のP PTRストレージのアドレスに%PがPTRの値が格納されている値(PTRポイント値)%D \ N-によって指し示さ」、およびPTR、PTR、* )PTR; 12は // 1、。 intが*型がポインタ型であることを示している 13 // 2、名前PTR、PTR INT *は型で 14 // 。int型の変数に3、PTRポイント(アドレス) 15 // 4、ポインタ変数、アドレス自体PTR& 16 // 5、変数へのポインタを取得します格納アドレスPTR 17。 // 6は、ポインタの値を得る:* PTR 18である 19。 }
メモリのレイアウト図:
2、演習1
プログラムの書き込み、変数NUMのINTアドレスを取得し、ポインタPTRをNUMに端末アドレスに表示され、PTRによってNUMの値を変更するために、図1に示すメモリレイアウト。
1の#include <stdio.hの> 2 空隙(メイン){ 3 int型 NUM = 100 ; 図4 のprintf(" NUMの値は%NUM P%\ N-のアドレスである"、NUM、&NUM); 5 。6 INT * =&PTRのNUM; 7 * PTR = 200であり、 図8 のprintf(" NUMの値は%D NUM P%\ N-のアドレスである"、NUM、&NUM); 9 }
メモリのレイアウト図
3、演習2
正しくプログラムかどうかを確認
4、練習3
どのような出力
1 #include<stdio.h> 2 3 void main() { 4 int a = 300; 5 int b = 400; 6 int* ptr = &a; //ptr 指向a 7 *ptr = 100; //a=100 8 ptr = &b; //ptr指向b 9 *ptr = 200; //b=200 10 printf("a=%d,b=%d,*ptr=%d", a, b, *ptr); 11 }
5,指针细节
①基本类型,都有对应的指针类型,形式为 数据类型* ,比如 int的对应的指针就是 int* , float 对应的指针类型就是 float* ,以此类推
②此外还有指向数组的指针,指向结构体的指针,指向共用体的指针,二级指针,多级指针等。