大家好,今天小編來(lái)為大家解答以下的問(wèn)題,關(guān)于數(shù)組名和指針的區(qū)別,數(shù)組和指針之間有什么關(guān)系這個(gè)很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!
數(shù)組指針和指針數(shù)組有啥區(qū)別
指針數(shù)組和數(shù)組指針的區(qū)別如下:
1.定義方式不同:指針數(shù)組是一個(gè)元素為指針類(lèi)型的數(shù)組,而數(shù)組指針是一個(gè)指向數(shù)組的指針。
2.數(shù)據(jù)類(lèi)型不同:指針數(shù)組中每個(gè)元素都是一個(gè)指針,而數(shù)組指針本身是一個(gè)指向特定類(lèi)型數(shù)據(jù)的數(shù)組。
3.訪問(wèn)元素不同:在訪問(wèn)指針數(shù)組時(shí),需要首先訪問(wèn)該元素所在的位置,然后使用間接引用操作符(*)來(lái)訪問(wèn)該元素所指向的值;在訪問(wèn)數(shù)組指針時(shí),可以直接使用下標(biāo)操作符[]訪問(wèn)其所指向的數(shù)組中的元素。
4.內(nèi)存布局不同:對(duì)于指針數(shù)組,每個(gè)元素都是一個(gè)獨(dú)立的內(nèi)存位置,其值存儲(chǔ)了相應(yīng)對(duì)象或變量地址;而對(duì)于數(shù)組指針,它本身也是一個(gè)變量,并且存儲(chǔ)了整個(gè)數(shù)組的地址
數(shù)組和指針之間有什么關(guān)系
1、指針:系統(tǒng)為某一個(gè)變量開(kāi)辟單元格,指針便指向此單元格的變量值。
2、數(shù)組:系統(tǒng)為某一組數(shù)開(kāi)辟一組單元格,數(shù)組首地址便是你定義的數(shù)組變量名。
數(shù)組和指針的唯一區(qū)別是,不能改變數(shù)組名稱(chēng)指向的地址。
對(duì)于數(shù)組來(lái)說(shuō),數(shù)組的首地址,也可以用指針來(lái)表示操作,如:
inta[10];
int*p,n;
p=a;
對(duì)第一個(gè)元素取值,可以用幾種方法:
n=a[0];
n=*p;
n=p[0];
n=*(p+0);
但是以下語(yǔ)句則是非法的:
readings=totals;//非法!不能改變r(jià)eadingstotals=dptr;//非法!不能改變totals
數(shù)組名稱(chēng)是指針常量。不能讓它們指向除了它們所代表的數(shù)組之外的任何東西。
擴(kuò)展資料
下面的程序定義了一個(gè)double數(shù)組和一個(gè)double指針,該指針?lè)峙淞藬?shù)組的起始地址。隨后,不僅指針?lè)?hào)可以與數(shù)組名稱(chēng)一起使用,而且下標(biāo)符號(hào)也可以與指針一起使用。
intmain()
{
constintNUM_COINS=5;
doublecoins[NUM_COINS]={0.05,0.1,0.25,0.5,1.0};
double*doublePtr;//Pointertoadouble
//AssigntheaddressofthecoinsarraytodoublePtr
doublePtr=coins;
//Displaythecontentsofthecoinsarray
//Usesubscriptswiththepointer!
cout<<setprecision(2);
cout<<"Herearethevaluesinthecoinsarray:\n";
for(intcount=0;count<NUM_COINS;count++)
cout<<doublePtr[count]<<"";
//Displaythecontentsofthecoinsarrayagain,butthistimeusepointernotationwiththearrayname!
cout<<"\nAndheretheyareagain:\n";
for(intcount=0;count<NUM_COINS;count++)
cout<<*(coins+count)<<"";
cout<<endl;
return0;
}
程序輸出結(jié)果:
Herearethevaluesinthecoinsarray:0.050.10.250.51Andheretheyareagain:0.050.10.250.51
當(dāng)一個(gè)數(shù)組的地址分配給一個(gè)指針時(shí),就不需要地址運(yùn)算符了。由于數(shù)組的名稱(chēng)已經(jīng)是一個(gè)地址,所以使用&運(yùn)算符是不正確的。但是,可以使用地址運(yùn)算符來(lái)獲取數(shù)組中單個(gè)元素的地址。
什么是變量或數(shù)組名
變量或數(shù)組名
實(shí)際上,規(guī)模為n的數(shù)組變量是由n個(gè)普通的變量組成的。數(shù)組是一個(gè)包含多個(gè)值的變量。任何變量都可以在數(shù)組中使用。數(shù)組的尺寸沒(méi)有最大限制,也不要求成員變量連續(xù)索引或者賦值
對(duì)于c而言,數(shù)組變量就是指數(shù)組名,它的值等于數(shù)組第一個(gè)元素的地址。
聲明數(shù)組變量可以用typeArray[index]的方式進(jìn)行。
數(shù)組是基于0的:第一個(gè)元素的下標(biāo)以0開(kāi)始。
注意數(shù)組變量與數(shù)組的區(qū)別:數(shù)組變量是一個(gè)地址,數(shù)組是一系列連續(xù)分布的內(nèi)存。
注意數(shù)組變量與指針的區(qū)別:數(shù)組變量某種意義上代表了一個(gè)固定的指針值,可以參加運(yùn)算,但是不可以對(duì)它進(jìn)行賦值,如果c是一個(gè)數(shù)組變量,如c++,c=p是不合法的但是*(c+2)是合法的
指針數(shù)組和數(shù)組指針的區(qū)別
數(shù)組指針(也稱(chēng)行指針)定義int(*p)[n];()優(yōu)先級(jí)高,首先說(shuō)明p是一個(gè)指針,指向一個(gè)整型的一維數(shù)組,這個(gè)一維數(shù)組的長(zhǎng)度是n,也可以說(shuō)是p的步長(zhǎng)。也就是說(shuō)執(zhí)行p+1時(shí),p要跨過(guò)n個(gè)整型數(shù)據(jù)的長(zhǎng)度。
如要將二維數(shù)組賦給一指針,應(yīng)這樣賦值:inta[3][4];int(*p)[4];//該語(yǔ)句是定義一個(gè)數(shù)組指針,指向含4個(gè)元素的一維數(shù)組。p=a;//將該二維數(shù)組的首地址賦給p,也就是a[0]或&a[0][0]p++;//該語(yǔ)句執(zhí)行過(guò)后,也就是p=p+1;p跨過(guò)行a[0][]指向了行a[1][]
所以數(shù)組指針也稱(chēng)指向一維數(shù)組的指針,亦稱(chēng)行指針。
指針數(shù)組定義int*p[n];[]優(yōu)先級(jí)高,先與p結(jié)合成為一個(gè)數(shù)組,再由int*說(shuō)明這是一個(gè)整型指針數(shù)組,它有n個(gè)指針類(lèi)型的數(shù)組元素。這里執(zhí)行p+1時(shí),則p指向下一個(gè)數(shù)組元素,這樣賦值是錯(cuò)誤的:p=a;因?yàn)閜是個(gè)不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變量可以用來(lái)存放變量地址。但可以這樣*p=a;這里*p表示指針數(shù)組第一個(gè)元素的值,a的首地址的值。如要將二維數(shù)組賦給一指針數(shù)組:int*p[3];inta[3][4];p++;//該語(yǔ)句表示p數(shù)組指向下一個(gè)數(shù)組元素。注:此數(shù)組每一個(gè)元素都是一個(gè)指針for(i=0;i<3;i++)p[i]=a[i]這里int*p[3]表示一個(gè)一維數(shù)組內(nèi)存放著三個(gè)指針變量,分別是p[0]、p[1]、p[2]所以要分別賦值。
這樣兩者的區(qū)別就豁然開(kāi)朗了,數(shù)組指針只是一個(gè)指針變量,似乎是C語(yǔ)言里專(zhuān)門(mén)用來(lái)指向二維數(shù)組的,它占有內(nèi)存中一個(gè)指針的存儲(chǔ)空間。指針數(shù)組是多個(gè)指針變量,以數(shù)組形式存在內(nèi)存當(dāng)中,占有多個(gè)指針的存儲(chǔ)空間。還需要說(shuō)明的一點(diǎn)就是,同時(shí)用來(lái)指向二維數(shù)組時(shí),其引用和用數(shù)組名引用都是一樣的。比如要表示數(shù)組中i行j列一個(gè)元素:*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
優(yōu)先級(jí):()>[]>*
指針數(shù)組和數(shù)組指針的區(qū)別是什么
指針數(shù)組和數(shù)組指針的區(qū)別如下:
1.定義方式不同:指針數(shù)組是一個(gè)元素為指針類(lèi)型的數(shù)組,而數(shù)組指針是一個(gè)指向數(shù)組的指針。
2.數(shù)據(jù)類(lèi)型不同:指針數(shù)組中每個(gè)元素都是一個(gè)指針,而數(shù)組指針本身是一個(gè)指向特定類(lèi)型數(shù)據(jù)的數(shù)組。
3.訪問(wèn)元素不同:在訪問(wèn)指針數(shù)組時(shí),需要首先訪問(wèn)該元素所在的位置,然后使用間接引用操作符(*)來(lái)訪問(wèn)該元素所指向的值;在訪問(wèn)數(shù)組指針時(shí),可以直接使用下標(biāo)操作符[]訪問(wèn)其所指向的數(shù)組中的元素。
4.內(nèi)存布局不同:對(duì)于指針數(shù)組,每個(gè)元素都是一個(gè)獨(dú)立的內(nèi)存位置,其值存儲(chǔ)了相應(yīng)對(duì)象或變量地址;而對(duì)于數(shù)組指針,它本身也是一個(gè)變量,并且存儲(chǔ)了整個(gè)數(shù)組的地址。
文章分享結(jié)束,數(shù)組名和指針的區(qū)別和數(shù)組和指針之間有什么關(guān)系的答案你都知道了嗎?歡迎再次光臨本站哦!