指針與數(shù)組

指針與數(shù)組

指針數(shù)組乃摹,數(shù)組指針,指針法訪問數(shù)組跟衅,分不清如何使用孵睬,下面將幫你疏通思路,更好理解他們的關系与斤。

數(shù)組名的本質

    int array[5];
    printf("array = %o\n",array);
    printf("&array = %o\n",&array);
    printf("&array[0] = %o\n",&array[0]);
代碼結果

由結果可以得知肪康,數(shù)組名是一個地址,指向數(shù)組的首地址撩穿。那樣我們就可以通過指針來操作數(shù)組元素磷支。

指針法操作數(shù)組元素

可以通過*array來操作數(shù)組的首元素,但如果想要操作第二個元素食寡,要怎么辦呢雾狈?地址也是可以進行運算操作的,通過改變地址的值來指向不同的內存抵皱,這樣就有可能操作數(shù)組的第二個元素善榛。
首先看看數(shù)組的元素地址


數(shù)組地址

可以看到數(shù)組元素地址是一段連續(xù)的地址辩蛋,這樣就有可能通過知道數(shù)組首地址,來操作數(shù)組的所有元素移盆。上面的地址增量是4個字節(jié)悼院,聯(lián)想到該數(shù)組是int型,int型在32位平臺占4個字節(jié)咒循,所以這個增量是要看數(shù)組元素數(shù)據(jù)類型据途。

    int array[5];
    int *ptr = array;
    printf("ptr = %o\n",ptr);
    printf("ptr+1 = %o\n",ptr+1);

指針操作

可以看到ptr+1后地址開始由30177370變化為30177374,增量為4叙甸,這是為什么呢颖医?這就有關指針步長了。指針步長指指針加1的長度增量裆蒸∪巯簦可以看到此時步長為4,4這個數(shù)字很熟悉僚祷,ptr是整型指針佛致,整型在32位平臺中占4個字節(jié),和ptr指向的數(shù)組的元素地址增量一致久妆。那么就可以通過指針來操作數(shù)組元素晌杰。所以對應類型的指針指向對應類型的數(shù)據(jù),不然可能會出錯筷弦。

    *(ptr+1) = 2;
    *(ptr+2) = 3;

也可以使用[ ]的形式操作肋演, *與[ ]的效果一樣,編譯器內部做了處理烂琴。

    ptr[1] = 2;
    ptr[2] = 3;
過程

這種形式看起來ptr是一個數(shù)組名爹殊,閱讀體驗也不錯。我一般是使用這種形式奸绷。但不能把ptr當作是一個數(shù)組梗夸,他本質還是一個指針。


ptr與array

指針步長在一維數(shù)組與二維數(shù)組

一維數(shù)組

    int array[5] = {1,2,3,4,5};
    printf("array: %u array+1: %u\n",array,array+1);
    printf("&array: %u &array+1: %u\n",&array,&array+1);
    printf("sizeof(array) = %d\n",sizeof(array));
指針步長

可以看到array與&array的指針步長不一樣号醉,array的步長為一個元素的字節(jié)數(shù)反症,&array的步長為一個數(shù)組的長度。
array是這個數(shù)組的首元素地址 +1的長度為一個數(shù)據(jù)類型長度
&array是這個數(shù)組的首地址 +1的長度為·一個數(shù)組類型長度

二維數(shù)組

    int array[2][3] = {1,2,3,4,5,6};
    printf("array[0]: %u array[0]+1: %u\n",array[0],array[0]+1);
    printf("array: %u array+1: %u\n",array,array+1);
    printf("&array: %u &array+1: %u\n",&array,&array+1);
    printf("sizeof(array) = %d\n",sizeof(array));
    printf("sizeof(array[0]) = %d\n",sizeof(array[0]));

二維數(shù)組指針步長

&array 這個二維數(shù)組的首地址 指針步長為整個二維數(shù)組
array 這個二維數(shù)組的首行地址畔派,指針步長為每行的一維數(shù)組長度
*array 首行首元素地址铅碍,指針步長為元素的數(shù)據(jù)長度
*array 這個數(shù)組的首行首元素數(shù)據(jù)
這個對照array[ ]表示法就可以明白了,
等同于[ ]线椰。
*array == array[0] 就表示首行首元素地址胞谈。也可以是 &array[0][0],&與一個[ ]抵消。
**array == array[0][0] 這樣就很好理解了

注意事項

數(shù)組名不可以為左值,數(shù)組名雖然本質是一個地址烦绳,但這個只可以讀卿捎,不可以修改。

    int array1[5];
    int array[5];
    int *ptr = array1;
    array = ptr;   //error,編譯出錯

指針與數(shù)組的簡單介紹到此結束

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末径密,一起剝皮案震驚了整個濱河市午阵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睹晒,老刑警劉巖趟庄,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伪很,居然都是意外死亡,警方通過查閱死者的電腦和手機奋单,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門锉试,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人览濒,你說我怎么就攤上這事呆盖。” “怎么了贷笛?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵应又,是天一觀的道長。 經(jīng)常有香客問我乏苦,道長株扛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任汇荐,我火速辦了婚禮洞就,結果婚禮上,老公的妹妹穿的比我還像新娘掀淘。我一直安慰自己旬蟋,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布革娄。 她就那樣靜靜地躺著倾贰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拦惋。 梳的紋絲不亂的頭發(fā)上匆浙,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音架忌,去河邊找鬼吞彤。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的饰恕。 我是一名探鬼主播挠羔,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼埋嵌!你這毒婦竟也來了破加?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤雹嗦,失蹤者是張志新(化名)和其女友劉穎范舀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體了罪,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡锭环,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泊藕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辅辩。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖娃圆,靈堂內的尸體忽然破棺而出玫锋,到底是詐尸還是另有隱情,我是刑警寧澤讼呢,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布撩鹿,位于F島的核電站,受9級特大地震影響悦屏,放射性物質發(fā)生泄漏节沦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一窜管、第九天 我趴在偏房一處隱蔽的房頂上張望散劫。 院中可真熱鬧,春花似錦幕帆、人聲如沸获搏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽常熙。三九已至,卻和暖如春碱茁,著一層夾襖步出監(jiān)牢的瞬間裸卫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工纽竣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墓贿,地道東北人茧泪。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像聋袋,于是被迫代替她去往敵國和親队伟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • 原文地址:指針與數(shù)組的區(qū)別和聯(lián)系作者:zhenhuaqin 一.指針與數(shù)組的聯(lián)系: 指針與數(shù)組是C語言中很重要的兩...
    只為博軍一笑閱讀 2,679評論 0 2
  • 指針和數(shù)組到底有什么樣的關系幽勒,他們之間沒有任何關系嗜侮! 指針就是指針,指針變量在32 位系統(tǒng)下啥容,永遠占4 個byte...
    黃_龍閱讀 5,584評論 0 0
  • 二級指針與二維數(shù)組 char *string[] ={"abc","abcd","acf"};char str...
    去留無意hmy閱讀 619評論 0 4
  • 指針與數(shù)組是C語言中很重要的兩個概念锈颗,它們之間有著密切的關系,利用這種關系咪惠,可以增強處理數(shù)組的靈活性击吱,加快運行速度...
    HM955閱讀 1,825評論 0 0
  • 注:· 數(shù)組名只有被&和sizeof修飾的時候代表的是整個數(shù)組,其余其他情況代表的是數(shù)組首元素的地址 (舉例:對于...
    高思陽閱讀 752評論 0 0