今天終於弄明白了,指標陣列,和指向指標的指標的區別。
1 #include
2 #include
3 void main()
4 ;11 //for(i=0;i<3;i++)
12 //
15 }
一. 指標概念:
當我們程式如下申明變數:
short int i;
char a;
short int * pi;
程式會在記憶體某位址空間上為各變數開闢空間,如下圖所示。
記憶體位址→6 7 8 9 10 11 12 13 14 15
|short int i |char a| |short int * pi|
圖中所示中可看出:
i 變數在記憶體位址5的位置,佔兩個位元組。
a變數在記憶體位址7的位置,佔乙個位元組。
pi變數在記憶體位址9的位置,佔兩個位元組。(注:pi 是指標,我這裡指標的寬度只有兩個位元組,32位系統是四個位元組)
接下來如下賦值:
i=50;
pi=&i;
經過上在兩句的賦值,變數的記憶體映象如下:
記憶體位址→6 7 8 9 10 11 12 13 14 15
… | 50 | | | 6 | | | |
|short int i |char a| |short int * pi|
看到沒有:短整型指標變數pi的值為6,它就是i變數的記憶體起始位址。所以,這時當我們對*pi進行讀寫操作時,其實就是對i變數的讀寫操作。如:
*pi=5; //就是等價於i=5;
二. 指標的位址與指向另一指標位址的指標
我們看到,指標變數本身與其它變數一樣也是在某個記憶體位址中的,如pi的記憶體起始位址是10。同樣的,我們也可能讓某個指標指向這個位址。
看下面**:
short int * * ppi; //這是乙個指向指標的指標,注意有兩個*號
ppi=pi
第一句:short int * * ppi;——申明了乙個指標變數ppi,這個ppi是用來儲存(或稱指向)乙個short int * 型別指標變數的位址。
第二句:&pi那就是取pi的位址,ppi=pi就是把pi的位址賦給了ppi。即將位址值10賦值給ppi。如下圖:
記憶體位址→6 7 8 9 10 11 12 13 14 15
… | 50 | | | 6 | 10 | |
|short int i|char a| |short int * pi|short int ** ppi|
從圖中看出,指標變數ppi的內容就是指標變數pi的起始位址。於是……
ppi的值是多少呢?——10。
*ppi的值是多少呢?——6,即pi的值。
**ppi的值是多少呢?——50,即i的值,也是*pi的值。
指標 陣列指標 指標陣列 指向指標的指標
程式中一般通過變數名對變數進行訪問操作,其實質是通過位址進行的。對變數的訪問分為直接訪問和間接訪問,如語句 printf d i 執行的時候,根據變數名 與位址的對應關係,找到i的位址,依次取相應的位元組數中的資料 即i的值 把它輸出。這種按照變數位址訪問變數值的方式成為直接訪問 還可以將變數i的位...
指標陣列和指向陣列的指標
分析一下三個宣告 1 cat familyone 500 familyone 是乙個500個cat物件組成的陣列 2 cat familytwo 500 familytwo是乙個500個指向的cat的指標組成的陣列 指標陣列 3 cat familythree new cat 500 familyt...
C和指標之指標陣列和指向陣列的指標
定義乙個指標陣列,該陣列中每個元素是乙個指標,每個指標指向 就需要程式中後續再定義 int p 10 定義乙個陣列指標,該指標指向含10個元素的一維陣列 陣列中每個元素是int型 int p 10 我們知道二維陣列名是指向第乙個元素的指標,比如int a3 4 這裡a就是指向乙個包含4個元素陣列的指...