C語言 數(shù)組和指針

C語言中數(shù)組和指針是兩個(gè)常用的變量

數(shù)組:

C語言中定義一個(gè)數(shù)組a時(shí),如:int a[5];編譯器根據(jù)指定的元素個(gè)數(shù)和元素的類型分配確定大小(元素類型大小元素個(gè)數(shù))的一塊內(nèi)存骏融,并把這塊內(nèi)存的名字命名為a析苫。名字a一旦與這塊內(nèi)存匹配就不能被改變。
a[0],a[1]等是a的元素潭千,但并非元素的名字谱姓。數(shù)組的每一個(gè)元素都是沒有名字的。不能把數(shù)組當(dāng)一個(gè)整體來進(jìn)行讀寫操作刨晴。數(shù)組可以以指針的形式訪問
(a+i);也可以以下標(biāo)的形式訪問屉来,如:a[i]路翻。但其本質(zhì)都是a所代表的數(shù)組首元素的首地址加上 i*sizeof(類型)個(gè) byte 作為 數(shù)據(jù)的真正地址。
比如:

/*這種做法是錯(cuò)誤的茄靠,s作為右值時(shí)其意義與&s[0]是一樣茂契,代表的是數(shù)組首元素的首地址,
但s不能作為左值,我們只能訪問數(shù)組的某個(gè)元素而無法把數(shù)組當(dāng)一個(gè)總體進(jìn)行訪問慨绳。
所以a[i]當(dāng)成左值是沒問題的*/
char s[8];
s = "Good!";  
//下面這種方法是對(duì)的掉冶,聲明了字符指針和一個(gè)匿名的字符串,s里面存的是一塊內(nèi)存的首地址
char *s;
s="good!"; 
//還有種寫法也是正確的
char s[8] = "Good!";

指針:

在 32 位系統(tǒng)下脐雪,不管什么樣的指針類型厌小,其大小都為 4byte≌角铮可以測試一下 sizeof(void *)


指針和數(shù)組:

#include "stdio.h"
int main(int argc, char const *argv[])
{
    int a[5]={1,2,3,4,5};
    int *ptr=(int *)(&a+1); //a表示的是數(shù)組的首地址
    printf("%d,%d\n",*(a+1),*(ptr-1));
    return 0;
}

上面代碼的結(jié)果是2璧亚,5,對(duì)指針進(jìn)行加 1 操作脂信,得到的是下一個(gè)元素的地址癣蟋,而不是原有地址值直接加1。
所以吉嚣,一個(gè)類型為 T 的指針的移動(dòng)梢薪,以 sizeof(T) 為移動(dòng)單位。
因此尝哆,對(duì)上題來說秉撇,a 是一個(gè)一維數(shù)組,數(shù)組中有 5 個(gè)元素; ptr 是一個(gè) int 型的指針秋泄。
&a + 1: 取數(shù)組 a 的首地址琐馆,該地址的值加上 sizeof(a) 的值,即 &a + 5*sizeof(int)恒序,也 就是下一個(gè)數(shù)組的首地址瘦麸,顯然當(dāng)前指針已經(jīng)越過了數(shù)組的界限。
(int *)(&a+1): 則是把上一步計(jì)算出來的地址歧胁,強(qiáng)制轉(zhuǎn)換為 int * 類型滋饲,賦值給 ptr。

注意
a喊巍、&a的區(qū)別:
a,&a的值是一樣的屠缭,但意思不一樣,a是數(shù)組首元素的首地址崭参,也就是a[0]的首地址呵曹,&a是數(shù)組的首地址。
同理:a+1 是數(shù)組下一元素的首地址,即 a[1]的首地址,&a+1 是下一 個(gè)數(shù)組的首地址


指針數(shù)組和數(shù)組指針:

指針數(shù)組:首先它是一個(gè)數(shù)組奄喂,數(shù)組的元素都是指針铐殃,數(shù)組占多少個(gè)字節(jié)由數(shù)組本身
決定。它是“儲(chǔ)存指針的數(shù)組”的簡稱跨新。
數(shù)組指針:首先它是一個(gè)指針富腊,它指向一個(gè)數(shù)組。在32位系統(tǒng)下永遠(yuǎn)是占4個(gè)字節(jié)玻蝌, 至于它指向的數(shù)組占多少字節(jié)蟹肘,不知道词疼。它是“指向數(shù)組的指針”的簡稱俯树。
下面到底哪個(gè)是數(shù)組指針,哪個(gè)是指針數(shù)組呢:
A)贰盗,int * p1[10];
B)许饿,int (p2)[10];
“[]”的優(yōu)先級(jí)比“
”要高。p1 先與“[]”結(jié)合舵盈,構(gòu)成一個(gè)數(shù)組的定義陋率,int* 修飾的是數(shù)組的內(nèi)容,即數(shù)組的每個(gè)元素秽晚。那現(xiàn)在我們清楚瓦糟,這是一個(gè)數(shù)組,其包含10個(gè)指向int 類型數(shù)據(jù)的指針赴蝇,即指針數(shù)組菩浙。
在這里“()”的優(yōu)先級(jí)比“[]”高,“*”號(hào)和p2構(gòu)成一個(gè)指針的定義句伶,指針變量名為p2劲蜻,int 修飾的是數(shù)組的內(nèi)容,即數(shù)組的每個(gè)元素考余。數(shù)組在這里并沒有名字先嬉,是個(gè)匿名數(shù)組。那現(xiàn)在我們清楚p2是一個(gè)指針楚堤,它指向一個(gè)包含10個(gè)int類型數(shù)據(jù)的數(shù)組疫蔓,即數(shù)組指針。

#include "stdio.h"
int main(int argc, char const *argv[])
{
    char a[5]={'A','B','C','D'}; 
    char (*p)[5];
    p = &a;
    printf("%c,%c\n",*a,*(*p+1));//**p+1是錯(cuò)的
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末身冬,一起剝皮案震驚了整個(gè)濱河市衅胀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吏恭,老刑警劉巖拗小,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異樱哼,居然都是意外死亡哀九,警方通過查閱死者的電腦和手機(jī)剿配,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阅束,“玉大人呼胚,你說我怎么就攤上這事∠⒙悖” “怎么了蝇更?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呼盆。 經(jīng)常有香客問我年扩,道長,這世上最難降的妖魔是什么访圃? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任厨幻,我火速辦了婚禮,結(jié)果婚禮上腿时,老公的妹妹穿的比我還像新娘况脆。我一直安慰自己,他們只是感情好批糟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布格了。 她就那樣靜靜地躺著,像睡著了一般徽鼎。 火紅的嫁衣襯著肌膚如雪盛末。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天纬傲,我揣著相機(jī)與錄音满败,去河邊找鬼。 笑死叹括,一個(gè)胖子當(dāng)著我的面吹牛算墨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汁雷,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼净嘀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侠讯?” 一聲冷哼從身側(cè)響起挖藏,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厢漩,沒想到半個(gè)月后膜眠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年宵膨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了架谎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辟躏,死狀恐怖谷扣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捎琐,我是刑警寧澤会涎,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站瑞凑,受9級(jí)特大地震影響末秃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拨黔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一蛔溃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篱蝇,春花似錦、人聲如沸徽曲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秃臣。三九已至涧衙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奥此,已是汗流浹背弧哎。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稚虎,地道東北人撤嫩。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蠢终,于是被迫代替她去往敵國和親序攘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型寻拂。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一程奠。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,444評(píng)論 3 44
  • 變量的聲明和定義變量聲明(declaration) 可以declaration很多次晶姊,不占內(nèi)存空間,例如 exte...
    FlyingReganMian閱讀 1,038評(píng)論 0 1
  • 一伪货、框架 1们衙、Mac系統(tǒng)及常用工具、進(jìn)制;C數(shù)據(jù)類型碱呼、常量變量蒙挑、運(yùn)算符、表達(dá)式愚臀、格式化輸入輸出 2忆蚀、關(guān)系運(yùn)算符、邏...
    師景福閱讀 689評(píng)論 0 2
  • 記得我們都曾經(jīng)說過 我們會(huì)是一輩子的朋友 不管風(fēng)雨多猖狂 我們都會(huì)風(fēng)雨同舟 那時(shí)候的天總是很藍(lán) 那時(shí)候的陽光總是很...
    亞民閱讀 113評(píng)論 1 2
  • 2016.8.11 花兒是少年時(shí)的夙愿姑裂,隔著青春馋袜,正面對(duì)面。 ...
    __初歌閱讀 242評(píng)論 2 2