日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言数组与指针浅析

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言数组与指针浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?大部分人,特別是初學者對于一些奇怪的數組表達式表示詫異。

? ? ?舉個例子:

#include<stdio.h> int main(void) { int a[3]; for(int i = 0; i<3; ++i) {*(a+i) = i+1; } //what is this ?! Are you kidding me ?! //---------------------- printf("%d\n",*(a)); printf("%d\n",0[a+1]); printf("%d\n",((*a)[a+1])); return 0; }

? ? ?恩,很復雜,很無聊,感覺這樣來表達根本沒有意義。我也承認,把故意把它復雜化了,目的是講清楚一些有關數組與指針的關系。

? ? ?上面的程序,運行結果是把數組元素順序輸出,也就是分別輸出1,2,3。

? ? ?先來看看數組的定義:int a[3];

? ? ?a 是數組名,相信大家都有過數組名 a 作為函數實參的經歷,也就是把數組首元素地址 &a[0] 傳給函數。這說明什么,說明數組名 a 一個指針,默認指向了數組的第一個元素 a[0]。

? ? ?那么 a 作為指針,*a 是什么也就清楚了,*a 可以說是數組第一個元素的引用,也就是說,

*a = a[0]。以此類推 *(a+1) = a[1]……

? ? ?明白這個之后,再來看看下面這個推導“公式”。

? ? ?*a = *(a+0) = a[0] = *(0+a) = 0[a];

? ? ?*(a+1) = a[1] = *(1+a) = 1[a];

? ? ?這些表達式都是對的,a[i] = i[a] 也是成立的。再看看下面的推導:

? ? ?*(a+1+1) = a[2] = *(1+a+1) = 1[a+1];

? ? ?所以,a[2] = 1[a+1] 成立。可以這樣來想,(i)[a+j] = a[i+j];

? ? ?通過以上說明,對c語言數組與指針的關系可能更加清晰了。很多時候,我們會自己另外定義指針來指向數組:


int *p; int a[3]; p = a; //從這里可以看出,a 就是一個指針 //有些人這樣定義也對 p = &a[0]; p = &(*(a));

? ? ?通過自己另外定義的指針來對數組進行操作,然而低調的數組名 a ,卻淡然于世外,被人遺忘。

? ? ?所以,回頭看看一開始的那個程序,一切也就明白了,核心就是:數組名就是一個指針,默認指向了數組的首元素。所以,你對數組名的任何指針式的操作都是合法的。


? ? ?上面是一維數組的操作,下面來說說二維數組。

#include<stdio.h> int main(void) { int a[2][2]; a[0][0] = 1; a[0][1] = 2; a[1][0] = 3; a[1][1] = 4; //what is this ?! Are you kidding me ?! //---------------------- printf("%d\n",0[*(a)]); printf("%d\n",*(*(a)+1)); printf("%d\n",3[*(a)-1]); printf("%d\n",1[*(a)+2]); return 0; }

? ? 呵呵,這段代碼也挺讓人抓狂的,沒人會這么做,這么做的不是優秀的程序員。我還是那句話,夸張化來說明一些道理。不這么寫,但是一定要明白為什么可以這么寫,這是我的一點追求。

? ? 如果上面一維數組的講解清楚了,那么二維數組其實不難理解。

? ? 先來看看定義:

? ? int a[2][3];

? ? 代表什么意思?可以有很多理解,有些人覺得這可以看成是一個類似坐標的矩陣,比如把第一個[]里面的想成是x軸,第二個[]里面是y軸,所以這樣對a[1][2]就很容易理解,這樣理解是可以的。

? ? 有意思的是,它不過就是一維數組里面有個一維數組而已。拿a[2][3]舉例,也就是說,首先,數組名是 a ,它是一個一維數組a[2],這個一維數組的每一個元素放著什么呢?放著3個元素,把表達式就寫成a[2][3]。跟一維數組一樣,數組名 a 是指針,默認指向a[0][i],但是問題來了,因為a[0][i]當中的內存塊里面有三個int型的分別是a[0][0],a[0][1],a[1][2],究竟指向哪個呢?哪個都不指向,就只是指向a[0][i]而已,那么指向a[0][0]的指針在哪?在這:*a 。 ?*a 就是指向a[0][0]的指針,明白這種關系嗎?這里有個雙重指針。我結合一維數組來解釋一下:

? ? 一維數組中,a 是指針指向首元素,那么有等式【1】 *a = a[0];

? ? 二維數組中,a 是指針指向首元素a[0][i],那么利用上面的等式【1】,a[0][i]可以推導寫出這樣的等式:a[0][i] = *a[i],*a 可以看成是數組名,所以,*a 就是指向 a[0][0] 的指針,這樣就清楚多了,呼~

? ? 所以,理清楚這個關系,輸出**a,也就是輸出a[0][0]了,*(*a+1),當然就是a[0][1]。

? ? 所以,對于三維數組也清楚了吧,***a 就是 a[0][0][0],多維數組以此類推……

? ? 對于這樣的表達式:0[*(a)],也能理解了,推導:(見笑,筆者對邏輯步驟比較感興趣)

? ? 0[*(a)] = *(a)[0] = *a[0] = a[0][0];

? ? 恩,對c語言的數組與指針說得有點復雜,但這些確實很重要,平時編程可以不這么寫,但是一定要懂得里面的原理,這樣的好處不是讓自己能運用,而是讓自己不會運用錯誤。(指針操作錯誤可能引發很大的麻煩)

? ? 水平有限,有些包含不到,有些分析欠佳的,還請諒解。

轉載于:https://blog.51cto.com/listengeek/1346537

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的c语言数组与指针浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 高清av免费| 国产高清自拍视频 | 毛片综合| 亚洲免费在线视频 | 聚色屋 | 99热播| 欧美日韩国产精品一区二区三区 | 总裁边开会边做小娇妻h | 精品少妇一区二区三区免费观看 | 午夜色图 | 中国人与拘一级毛片 | 久久亚洲av成人无码国产电影 | 成人性毛片 | 欧美黄色大片在线观看 | av黄色免费观看 | 国产精品成人免费一区二区视频 | 日韩精品一卡 | 性感美女高潮 | av在线天堂网 | 欧美国产91| 日韩av一区在线观看 | 久久久久久av | 亚洲免费观看高清 | 欧美国产另类 | 欧美日韩1区2区3区 亚洲日本精品视频 | 精品久久五月天 | 美日韩精品视频 | 色欧美亚洲 | 操你啦免费视频 | 青青伊人影院 | 大学生高潮无套内谢视频 | 日韩av在线一区 | 男人天堂欧美 | 日日色综合 | 成人自拍av| 欧美 日韩 国产 成人 在线 | 亚洲视频成人 | 国产男女猛烈无遮挡免费视频动漫 | 特级特黄aaaa免费看 | 丝袜国产一区 | 国产大学生自拍视频 | 三级黄色在线 | 日本青青草视频 | 欧美精品激情视频 | 亚洲天堂一区二区三区四区 | 成人av自拍 | 国产成人av一区二区 | 久久精品视频中文字幕 | 大胸美女无遮挡 | 亚洲成人免费在线观看 | 国产精品麻豆视频 | 重口变态虐黄网站 | 国产精品久久久久久69 | 特种兵之深入敌后高清全集免费观看 | 亚洲国产成人综合 | 91香蕉国产在线观看软件 | 男女无套免费视频网站动漫 | 在线播放视频高清在线观看 | 精品国产一区二区三区av性色 | 欧美成人精品一区二区男人小说 | 一区二区三区免费视频观看 | 丰满少妇一区二区三区专区 | 日韩一级免费毛片 | 嫩草99| 日韩一级片网址 | 亚洲人吸女人奶水 | 另类ts人妖一区二区三区 | 日韩视频区 | 天堂中文在线8 | www.天堂av| 国产福利一区二区三区视频 | 亚洲风情亚aⅴ在线发布 | 久久999| 91看片看淫黄大片 | 亚洲精品国产精品乱码不卡√香蕉 | 99爱爱视频 | 精品少妇人妻av一区二区 | 97视频在线免费观看 | 国模在线| 女人高潮娇喘1分47秒 | 日韩精品在线视频免费观看 | 国产黄色片免费看 | 天天色天 | 亚洲国产免费看 | 99久久久无码国产精品免费蜜柚 | 亚洲欧美日韩综合一区二区 | 少妇又紧又爽视频 | 伊人黄网 | 久久亚洲av无码精品色午夜麻豆 | av网在线播放 | 最新av网站在线观看 | 六月天综合网 | 狠狠操操| 久久国产成人精品 | 成人网站在线进入爽爽爽 | 在线天堂中文在线资源网 | 色欲久久久天天天综合网精品 | 99国产在线 | 欧美一区二区三区四区视频 |