定義了乙個陣列 int a[10] ;
於是有這些賦值:int * p = a; int (*q)[10] = &a;是合法的。
那麼在c++引用上,有以下引用:
int * &p = a;int (*&q)[10] = &a; //但這個在c++編譯器上確實錯誤的。
原因是,無論是陣列的a還是&a,它們的值都是常量,不能用非const引用來繫結。(我們知道非const引用的使用是比較嚴格的)
於是我們改為:
int * const &p = a; int (* const &q)[10] = &a;//編譯器通過。p為指向首元素的指標,q為指向整個陣列的指標。
同時,c++還支援乙個引用:陣列的引用。
int (&b)[10] = a; //這時候的a不再代表第乙個元素的位址,而是整個陣列。這時候編譯器將不僅檢查陣列的型別是否匹配,還會檢查陣列的大小。
這裡的b為什麼不需要const指定呢?因為b引用的是陣列的元素(全部的陣列元素),b[1-10]分別是a[1-10]的引用。而陣列的元素都是可以修改的。
筆者認為這些引用在函式傳遞引數的時候也有很大的用處。
引用引數不需要另外開闢空間傳遞指標的值就能夠改變形參的值,而且十分直觀,有利於程式的可閱讀性。
對陣列指標的理解
整型陣列 int a 5 整型指標int p 可以存放其元素位址來進行指標訪問 字串陣列char str 5 10 該怎麼通過指標訪問其中的字串元素?字串是個陣列,所以要用陣列指標 p 即指向乙個什麼型別的陣列的指標 這是乙個寬度為10的字元陣列 所以需要 乙個寬度10的字元陣列的指標。即char ...
對陣列首位址的一些理解
首先來看這樣的一些 得到的的結果是很奇怪,cout a 我一直的理解是a其實是個變數,他的值是指向陣列int a 4 的指標,現在我發現這樣的理解是錯誤的,趕緊google了一下,才發現原來a其實是很多層含義的 首先a不應該看成是變數,確切的他應該是乙個指標常量,其次a與 a是兩個不同的含義,看以下...
對陣列的總結
1.陣列 是用來處理批量資料的一種資料型別,只是集合的一種。特點 產生一組連續的記憶體空間,用來存放批量資料 統一資料型別的元素 空間大小一旦確定,不能更改。1.一維陣列 宣告陣列 元素型別 變數名 分配空間後,會對每個元素進行自動初始化 基本資料型別元素,初始化為0 引用資料型別元素初始化為nul...