函数参数传递、数组指针、二级指针、左值、引用
數組和指針的區別
數組(名)是右值,而指針是左值?
例:
數組和指針是等效關系不是等價關系,一說指針對象,而數組非對象。
一維數組和指針很多時候可以通用如:
p[i] ? *(p+i)
&p[i] ? p+i
二維數組分配 ※
二維數組(指針)動態分配和釋放
malloc工作只是開辟一塊你要的內存(連續的),同時返回內存首字節的地址,但是他不限定你內存里的內容,malloc( 5*sizeof(char) ) 只是給你空出一段20字節的內存空間,并且給你他的首地址,而你實際要往內存里裝什么,完全通過強制類型轉換來限定,比如 int**p=(int**)malloc(n*sizeof(char*))
動態分配基本都要用到指針數組。
法2參考
兩種方法的差異在于后者需要兩個變量名,而第一種由于直接對元素賦值,中間指針數組并不需要命名。
注意內存的釋放都是先釋放低級的,再釋放高級的。
此外,指針數組首地址不等于二維數組首地址,說明指針數組塊和二維數組塊不是重疊的,都有分配各自的空間。如圖:
二維數組參數傳遞
傳遞的三種方法
指針的偏移量問題
-
指針的偏移量=指針的當前值+n*sizeof(指針指向的數據類型)
如 ? ?int (*a)[3]={0}; a是一個數組指針,a+1的偏移量是12個字節
又如 -
二維數組指針
左值和右值
左值(lvalue):一個標識非臨時性對象的表達式。通常來說,可以將程序中所有帶名字的變量看做左值。
右值(rvalue):相對的,右值標識是臨時性對象的表達式,這類對象沒有指定的變量名,都是臨時計算生成的。
引用
(1)左值引用
左值引用的聲明是通過在某個類型后放置一個符號&來進行的。前文代碼中的int & y = x;便是一個左值引用。
需要注意的是,在定義左值引用時,=右邊的要求是一個可修改的左值。
(2)右值引用(不常用)
類似于左值引用,右值引用便是對右值的引用,它是通過兩個&&來聲明的
引用和指針有什么區別
我們知道,指針是在內存中存放地址的一種變量,cpu能夠直接通過而變量名訪問唯一對應的內存單元,且每個內存單元的地址都是唯一的。
而變量名和引用,都可以看做內存的一個標簽或是標識符,計算機通過是否符合標識符判斷是否為目標內存,而一個內存可以有多個標識符
參考:https://www.cnblogs.com/Bylight/p/10530274.html
總結
以上是生活随笔為你收集整理的函数参数传递、数组指针、二级指针、左值、引用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++将.cpp编译为.so文件
- 下一篇: Imbalanced class pro