※※※※※※※※※※※※※※※※※※※指標與數組※※※※※※※※※※※※※※※※※※※※※※※※※※※ 12:49 2008-1-25 BY:CHLAWS
數組在記憶體中的分配並不是以表格形式排列。 單個元素的儲存和引用實際上是以線性形式排列在記憶體中的。
指標數組就是一個lliffe變數。
****************************************************************************************************
數組和指標參數是如何被編譯器修改的.
"數組名被改寫成一個指標參數"規則並不是遞迴定義的.數組的數組會被改寫為"數組的指標",而不是"指標的指標"
****************************************************************************************************
實 參 所匹配的形式參數
數組的數組 char c[8][10]; char(*)[10]; 數組指標
指標數組 char *c[15]; char **c; 指標的指標
數組指標(行指標) char (*c)[64]; char (*c)[64]; 不改變
指標的指標 char **c; char **c; 不改變
正如上所述, 因此在main()中的參數才能看到 **argv這樣的參數,因為*argv[]是指標數組,在編譯時間會被編譯器改寫
成一個指向指標的指標.如果argv是一個數組的數組即(char argv[10][15])它將被編譯器改寫成char (*argv[15]),
而不是 char **argv .
當數組名作為函數參數傳遞時,實際傳遞給函數的是一個指向數組第一個元素的指標.
函數所接受的參數實際上是原參數的一份拷貝(副本),所以函數可以對其進行操作而不會影響實際參數.
但是,對指標參數執行間接訪問操作允許函數修改原先的數組的元素.
//提煉:即對形參中指標副本的修改不會影響指標參數的本身,但對指標所指向單元的內容的修改會改變實參的內容.