最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談C/C++中指針和數(shù)組的不同

 更新時間:2020年05月29日 14:15:01   作者:Van0512  
本文主要解析了C/C++中數(shù)組和指針的區(qū)別,文章簡單易懂,對各位的工作學習有所幫助,有需求的朋友可以了解下

這邊先簡單介紹一下內(nèi)存分區(qū)。

內(nèi)存按照用途劃分為五個區(qū):

1.棧區(qū):由系統(tǒng)控制分配和回收。

例如定義變量 int x = 0; int *p = NULL; 變量所占的內(nèi)存都是分配在棧區(qū)的。

2.堆區(qū):由程序員管理。

在C語言中由 malloc 申請的內(nèi)存,或者在C++中,用 new 申請的內(nèi)存,是在堆區(qū)中申請的。用完之后需要程序員自己回收,否則會造成內(nèi)存泄漏。

3.全局區(qū):存儲全局變量及靜態(tài)變量

4.常量區(qū):存儲常量。

5.代碼區(qū):存儲編譯之后的二進制代碼。

數(shù)組和指針具有很大的相似性,實際上,數(shù)組也是一種指針,一種有點特別的指針。
例如,可以這樣申請包含10個 int 型數(shù)據(jù)的數(shù)組

//方式1
int arr[10]; //棧區(qū)
//方式2
int *ptr = new int[10]; //堆區(qū)

我們也常常在定義一個函數(shù)的時候使用指針,而傳入實參(argument)的時候使用數(shù)組(甚至函數(shù)的聲明和定義可以用指針和數(shù)組混搭)。例如:

void func(int *ptr, int n) {
 //statements
}

int main(void) {
 int arr[10];
 ...
 func(arr, 10);
 return 0;
}

數(shù)組名代表著一個地址,是其所占內(nèi)存單元的首地址。在上例中,arr 和 &arr[0] 是相同的。

數(shù)組名表示一個地址,這一點和指針一樣。不一樣的地方在于數(shù)組名是一個固定的地址,數(shù)組是存放在棧區(qū)的,其地址不能改變,也即是一個 const 。
在用一個指針指向數(shù)組的時候,可以有幾種形式。

int arrInt[10];
/*
ptr1 和 arrInt 的值是一樣的,都是同一塊內(nèi)存空間的首地址。
這種形式規(guī)定了 ptr1 指向了一個包含10個元素的整形數(shù)組,書寫麻煩,同時也限制了指針,因此很少用。
*/
int (*ptr1)[10] = &arrInt;
/*
這種形式就是我們比較熟悉和喜聞樂見的了。
在前面一塊代碼中,在實參中傳入數(shù)組名,實際上做了這樣一件事情:
int *ptr = arrInt; 形式參數(shù)是一個指向了 arrInt 的指針。
重點要解釋的地方在下一塊代碼中說明~~~
*/
int *ptr2 = arrInt;

在C++中,有一種引用類型,相當于給變量取了個別名,在傳遞參數(shù)的時候就不會拷貝參數(shù),提高了效率,減少了內(nèi)存開銷。
顯而易見,在傳遞數(shù)組參數(shù)的時候,可以使用數(shù)組的引用。
數(shù)組的引用也有不同的方式:

int arrInt[10];
//和指向數(shù)組的指針的第一種定義方式類似
int (&ref1)[10] = arrInt;
//這樣寫怎么樣?
int *&ref2 = arrInt;
/*
編譯器會報錯:
invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'.
原因在于,在棧區(qū)中的數(shù)組 arrInt 由系統(tǒng)控制,它的地址不能改變。
如果上面的代碼可以通過,就意味著可以通過 ref2 指向其他的地址,從而修改 arrInt 的內(nèi)存地址,這是不允許的,所以編譯不通過。
*/
/*
可以這樣做。
ref3 是一個引用,并且是一個常量的引用,引用的是一個 int* 。
由于 ref3 是一個常量引用,它的值不允許被修改,因此 ref3 就能夠引用 arrInt。
*/
int * const &ref3 = arrInt;

啰啰嗦嗦講了這么多,其實就一句話——
在棧區(qū)中的數(shù)組是一種不能改變地址的指針,或者說是一種 const 指針。
o(╯╰)o
(再多一句~~~)
而在堆區(qū)中動態(tài)申請內(nèi)存的數(shù)組,也就是我們平時在用的指針。

以上就是淺談C/C++中指針和數(shù)組的不同的詳細內(nèi)容,更多關于c/c++ 指針和數(shù)組的資料請關注腳本之家其它相關文章!

相關文章

  • C語言深入分析函數(shù)與宏的使用

    C語言深入分析函數(shù)與宏的使用

    C語言函數(shù)是一種函數(shù),用來編譯C語言,一般包括字符庫函數(shù),數(shù)學函數(shù),目錄函數(shù),進程函數(shù),診斷函數(shù),操作函數(shù)等,宏在C語言中是一段有名稱的代碼片段。無論何時使用到這個宏的時候,宏的內(nèi)容都會被這段代碼替換掉
    2022-04-04
  • C++拷貝構造函數(shù)(深拷貝與淺拷貝)詳解

    C++拷貝構造函數(shù)(深拷貝與淺拷貝)詳解

    深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當這個類的對象發(fā)生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝
    2013-09-09
  • C語言文件操作的入門詳解教程

    C語言文件操作的入門詳解教程

    這篇文章主要給大家介紹了關于C語言文件操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C語言實現(xiàn)掃雷游戲及其優(yōu)化

    C語言實現(xiàn)掃雷游戲及其優(yōu)化

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷游戲及其優(yōu)化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • VC程序在Win32環(huán)境下動態(tài)鏈接庫(DLL)編程原理

    VC程序在Win32環(huán)境下動態(tài)鏈接庫(DLL)編程原理

    這篇文章主要介紹了VC程序在Win32環(huán)境下動態(tài)鏈接庫(DLL)編程原理,包括了dll文件的原理與具體實現(xiàn)過程,對于深入掌握VC程序設計具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • 基于C語言實現(xiàn)高級通訊錄的示例代碼

    基于C語言實現(xiàn)高級通訊錄的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)一個高級通訊錄的功能,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的小伙伴可以參考一下
    2023-01-01
  • C++如何解決rand()函數(shù)生成的隨機數(shù)每次都一樣的問題

    C++如何解決rand()函數(shù)生成的隨機數(shù)每次都一樣的問題

    這篇文章主要介紹了C++如何解決rand()函數(shù)生成的隨機數(shù)每次都一樣的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言循環(huán)控制入門介紹

    C語言循環(huán)控制入門介紹

    大家好,本篇文章主要講的是C語言循環(huán)控制入門介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法

    求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法

    本篇文章是對求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 全排列算法的原理和實現(xiàn)代碼

    全排列算法的原理和實現(xiàn)代碼

    這篇文章主要介紹了全排列算法的原理和實現(xiàn)代碼,全排列是將一組數(shù)按一定順序進行排列,如果這組數(shù)有n個,那么全排列數(shù)為n!個,需要的朋友可以參考下
    2014-08-08

最新評論

庄浪县| 海兴县| 宜君县| 武鸣县| 常宁市| 乐业县| 邵武市| 固安县| 富锦市| 和平县| 苏州市| 定安县| 藁城市| 永登县| 扎赉特旗| 西乡县| 芮城县| 威远县| 和静县| 金溪县| 隆安县| 灵川县| 工布江达县| 承德市| 台南市| 建平县| 通州区| 牙克石市| 普定县| 沈丘县| 响水县| 垣曲县| 财经| 绥德县| 筠连县| 宜黄县| 全南县| 山阴县| 营山县| 鹿泉市| 阿坝县|