C++數(shù)組和指針的區(qū)別與聯(lián)系
前言:
一直以來,有很多地方在說到數(shù)組和指針時(shí)都會(huì)說數(shù)據(jù)就是指針,這種觀點(diǎn)也被越來越多的人接受。本文將主要介紹數(shù)組和指針。是不是一樣的大家自己理解。如此而已……
1 數(shù)組和指針的概念
數(shù)組:具有固定大小和連續(xù)內(nèi)存空間的相同數(shù)據(jù)集合。里面的存儲(chǔ)的元素具有地址連續(xù)性和數(shù)據(jù)類型相同的特點(diǎn)。
指針:是指存放內(nèi)存地址的變量。從0開始。32位系統(tǒng)可訪問內(nèi)存4G,目前64位系統(tǒng)可尋址內(nèi)存空間為128G。(可能會(huì)更大。這個(gè)需要硬件資源的支撐。不抬杠)
2 數(shù)組和指針的操作
2.1 賦值
數(shù)組:對數(shù)組元素進(jìn)行逐個(gè)賦值。
指針:相同類型指針可以直接進(jìn)行賦值。
2.2 存儲(chǔ)
數(shù)組:從數(shù)組的定義就可以知道。數(shù)組的內(nèi)存是連續(xù)的??梢栽跅I线M(jìn)行定義也可以通過malloc或者new等在堆上進(jìn)行定義。
指針:本身是一個(gè)變量,指向其對應(yīng)的類型的變量。指向的地址也是變量的地址,然后在通過該地址獲取它指向變量的值。
2.3 大小
可以通過sizeof
宏進(jìn)行獲得。
數(shù)組:數(shù)組的大小通過sizeof(數(shù)組名)/sizeof(類型名)獲取。
指針:在32位的操作系統(tǒng)中為4,在64位操作系統(tǒng)中是8。
2.4 初始化
數(shù)組的初始化方式為:
//初始化一個(gè)雙精度型數(shù)組 double balance[5] = {1.0, 2.0, 3.0, 4.0, 5.0}; //初始化一個(gè)二維數(shù)組 int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
指針的初始化方式為:
//定義一個(gè)指向整型變量的指針 int *p=new int(0) ; //定義一個(gè)指向數(shù)組的指針 int *p=new int[n]; //定義一個(gè)指針的指針 int **pp=new (int*)[2];? pp[0]=new int[6]; pp[1]= new int[10];
指針數(shù)組和數(shù)組指針的定義請移步以下文章:C語言簡明知識(shí)系列十一(下):指針
3 數(shù)組和指針的傳參
C/C++的傳參方式可以分為傳值型和傳址型,傳值實(shí)際上對將參數(shù)進(jìn)行拷貝,在程序運(yùn)行中對參數(shù)做的任何修改都是在拷貝后的變量產(chǎn)生的,函數(shù)退出后不會(huì)影響傳入?yún)?shù),傳址型恰恰相反,會(huì)對原有參數(shù)進(jìn)行修改。數(shù)組和指針當(dāng)做參數(shù)傳入時(shí)基本為引用方式,具體要看代碼作者是如何使用。
3.1 數(shù)組的傳參
數(shù)組傳參分為一維數(shù)組和多維數(shù)組。當(dāng)做參數(shù)傳入時(shí)會(huì)退化成指針。
一維數(shù)組:
void Fun(int a[]) { ? ? ; } int main() { ? ?int testArray[]={1,2,3}; ? ?Fun(testArray); ? ?return 0; }
如上,當(dāng)然也可以將Fun函數(shù)的參數(shù)形式定義為如下形式:
void Fun(int *a) { ? ? ; }
二維數(shù)組:
void Fun(int (*a)[5]) { ? ? ; } int main() { ? ?int testArray[2][5]={ ? ? ? ?{1,2,3,4,5}, ? ? ? ?{4,5,6,7,8} ? ?}; ? ?Fun(testArray); ? ?return 0; }
3.2 指針的傳參
如果函數(shù)的參數(shù)是一個(gè)指針。那么可以給函數(shù)傳遞的參數(shù)為三種,分別是:指針變量、變量的地址、一個(gè)數(shù)組名。在這里數(shù)組名實(shí)際上就是指向數(shù)組的首地址。
指針:
void Fun_p(int *p){}; int main() { ? ?int testArray[]={1,2,3}; ? ?int *pIntArray = testArray; ? ?int iValue = 10; ? ?//傳遞數(shù)組名 ? ?Fun_p(testArray); ? ?//傳遞指針變量 ? ?Fun_p(pIntArray); ? ?//變量地址 ? ?Fun_p(&iValue); ? ?return 0; }
指針的指針:
void Fun(int **p) { ? ? ; } int main() { ? ?int testArray[5]={1,2,3,4,5}; ? ?int *pIntArray = testArray; ? ?int iValue = 10; ? ?int *tmpP = &iValue; ? ?//傳遞指針變量 ? ?Fun(&pIntArray); ? ?//變量地址 ? ?Fun(&tmpP); ? ?return 0; }
4 總結(jié)
除了上面介紹外,指針還有函數(shù)指針,自然就會(huì)有指向函數(shù)的指針數(shù)組以及指向函數(shù)指針的指針。在實(shí)際使用時(shí),這些類型的引入在指引我們靈活編程的同時(shí)也給我們帶來了很大的風(fēng)險(xiǎn),一旦出錯(cuò),排除問題和解決問題的復(fù)雜度也將增加。在進(jìn)行指針編程的時(shí)候需要謹(jǐn)慎使用。
函數(shù)和數(shù)組既有相同點(diǎn),也有不各自獨(dú)特之處。細(xì)思之,一些所謂函數(shù)既指針的說法需要謹(jǐn)慎判斷。切勿人云亦云!
到此這篇關(guān)于C++數(shù)組和指針的區(qū)別與聯(lián)系的文章就介紹到這了,更多相關(guān)C++數(shù)組和指針的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)影院售票管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)影院售票管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表
這篇文章主要介紹了c++獲取進(jìn)程信息列表和進(jìn)程所調(diào)用的dll列表,大家參考使用吧2013-11-11C++中cin.getline()和getline()函數(shù)的區(qū)別小結(jié)
這篇文章主要介紹了C++中cin.getline()和getline()函數(shù)區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03C++學(xué)習(xí)小結(jié)之二進(jìn)制轉(zhuǎn)換
這篇文章主要介紹了C++學(xué)習(xí)小結(jié)之二進(jìn)制轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2015-07-07C語言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了C語言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)的源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11linux c 查找使用庫的cflags與libs的方法詳解
本篇文章是對在linux中使用c語言查找使用庫的cflags與libs的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++算法學(xué)習(xí)之分支限界法的應(yīng)用
分支限界法常以廣度優(yōu)先或以最小耗費(fèi)(最大效益)優(yōu)先的方式搜索問題的解空間樹。本文將詳細(xì)講解分支限界法的應(yīng)用,需要的可以參考一下2022-05-05