指標和陣列作為引數傳入函式時,傳入的是位址,即指向變數的位址和陣列的首位址,可以在函式中改變指標或陣列的值,但本質上它們還是值的傳遞(區別於變數的值傳遞的是:變數值傳遞不會改變實參原來的值。),我們無法對指標和陣列的位址進行操作(如:位址賦值,分配記憶體等),要進行位址操作需要使用指標引用或指標的指標。
示例:
int main()
; testfun(p, sz); //10, 20
testfun1(p); //10
testfun2(p); //50
int * p1 = null;
testfun3(p1);
*p1 = 10; //10
delete p1;
return 0;
}
//值傳遞
void testfun(int *p, int sz)
//值傳遞
int g_int = 50;
void testfun1(int *p)
//指標引用
void testfun2(int *&p)
//指標引用分配記憶體
void testfun3(int *&p)
執行testfun()後,指標值變為10,陣列變為20
執行testfun1()後,指標值為10,不變
執行testfun2()後,使用指標引用,指標值變為50
執行testfun3()後,使用指標引用,記憶體分配成功,指標可進行賦值
指標引用 == 指標的指標
指標的引用儲存的位址實際是指標本身的位址(即類似於int型的4位元組空間),對它進行位址賦值或記憶體分配,實際是使該指標重新指向乙個新的記憶體塊的首位址(即儲存新的指標變數位址,當然型別要是一樣的)。
使用const &傳參
屬於值傳遞,雖然使用引用,傳入的是位址,但是傳入的值無法改變。
指標陣列 陣列指標 陣列傳參
指標陣列 實際上是乙個陣列,陣列中存放的元素是指標 例如 int arr 10 char arr1 5 陣列指標 實際上是乙個指標,指向乙個陣列的指標 例如 int p 10 這就表示乙個p指標,指向乙個大小為10陣列 在陣列傳參的過程中,由於c語言的對於速度的要求的特點,是不會傳整個陣列的,最終陣...
陣列和指標傳參
在我們寫函式時,有沒有被引數型別難到呢?如果有,那就耐心看完本篇部落格吧 一維陣列傳參 二維陣列傳參 總結 陣列傳參時,降級為其內部元素型別的指標,二維陣列傳參,函式的引數只可以省略第乙個 的數字,因為對二維陣列,可以不知道有多少行元素,但必須知道一行有多少元素。引申為,多維陣列傳參,只有第乙個 的...
C 陣列指標 指標陣列及陣列傳參
一維陣列傳參 二維陣列傳參 一級指標傳參 二級指標傳參 小引 在指標的學習階段,有不少同學都十分畏懼這個物什,甚至 談指標色變 其實對指標的不理解,其實本質上是對記憶體的不理解,本篇部落格就從零開始 系統的來講解指標這個話題。首先我們應該明確以下的一些基礎常識 指標是乙個變數,用來存放位址,位址唯一...