指針數組


指針數組,怎么理解這個詞呢,和前面我教大家理解指針常量和常量指針一樣。指針數組首先應該是一個數組,即指針組成的數組,那么很容易理解,這個數組里面的元素都是指針類型的,比如我們定義一個字符數組 char *pn[]={"Fred","Barney","Wilma","Betty"}; 其實指針數組就像一個二維數組,不過它比二維數組有更多的優勢,就像一級指針和一維數組的區別一樣,指針有更大的靈活性。指針數組首先建立一個一維數組空間,這塊空間在內存中是連續的,這個一維數組中的每一個元素實際上都是一個指針(這是關鍵),這個指針指向內存的某個未知的空白區域,我們進行 cout<<pn[i]<<endl; 就可以把其中的四個字符串輸出,比如我們定義“Fred”的時候,其實就是把“Fred”這個字符串放到內存中的一塊空白區域中,然后把這個空間的首地址給指針數組的第一個數組元素,所以我們進行輸出第一個數組元素的操作時(cout<<pn[0]<<endl;)它便可以通過這個pn[0]中的內容里的地址格式找到那塊指向的地址空間,然后把它按字符串的形式輸出(為什么會輸出字符串,具體實現請看昨天的博客隨筆《字符指針的特別之處》)。
  下面我們看一段程序:
#include<iostream.h> void print(char *[],int); void main()

 {     char *pn[]={"Fred","Barney","Wilma","Betty"};

     int num=sizeof(pn)/sizeof(char *);

    print(pn,num); }

 void print(char *arr[],int len)

 {     for(int i=0;i<len;i++)    //輸出各字符串

        cout<<(int)arr[i]<<"  "    //十進制輸出字符串地址

             <<arr[i]<<endl;    //輸出字符串 }
  關於輸出字符串地址為什么要用(int)arr[i]也請先看昨天的博客隨筆《字符指針的特別之處》。下面我說說,為什么用 int num=sizeof(pn)/sizeof(char *); 可以得到字符串的數目,這里關系到指針數組的實質,好多人都弄不懂就是因為還沒有理解透指針數組。   sizeof(pn)是求這個數組的長度,而不是它里面所包含的字符串的總長度,因為前面我們說過了,指針數組,首先是一個數組,只不過它里面的元素是指針,每種類型的指針的長度都是固定的(其實任何指針類型都是4個字節的長度),我們用這個數組中的每個指針元素的長度乘以數組元素的個數,即可以得到這個指針數組的長度,那么反過來我們就可以如果例子中一樣求出它的指針元素個數,而每個指針都是指向一個字符串的,所以我們就可以得到一共有多少條字符串,一點也不復雜。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM