指標陣列和指向指標的指標

2021-12-30 01:14:09 字數 1600 閱讀 5973

今天終於弄明白了,指標陣列,和指向指標的指標的區別。

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個元素陣列的指...