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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握)

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言作為很多大學理工科都會學習的語言,作為一種編程入門語言。

但是相對于其他高級編程語言來說相對是比較難,尤其是指針,不知道有多少莘莘學子都是因為它,從C語言入門到放棄。

想當年,筆者在大一學習C語言時也是被折磨的不輕,那個時候弄冒泡排序都不會。可能是那個時候邏輯思維不行吧,感覺工作后思維能力變強了,難道是被逼的,不知道你們有沒有這種感覺。

不扯了!

進入主題,今天來探討二維數組名到時是個啥?與數組地址、首行地址、首行首元素地址、指針到底有什么關系區別。

在C語言中地址就是指針,指針就是地址。我們的數組名也是地址,但是它到底是誰的地址呢?

有人說是數組地址,有人說是首元素地址,如果是二維數組 有人或許會說是首行地址。

沒毛病,他們的值都是相等,他們都重疊在一起的!但是他們所代表的意義卻大不一樣。下面用代碼來揭開他們的神秘面紗。

/* 測試 二維數組 數組名和整個數組地址、首行地址、首行首地址的區別和聯系 */ void arrPositonTest() {char a[4][30] = { "abcd","efjh","ijkl","mnop" };//&a 代表的是數組首地址,+1 步長=4*30*1 = 120printf("&a=%d,&a+1=%d\n", &a, &a + 1);//a 也就是數組名 代表的是數組首行地址,+1 跳過一行 步長=1*30*1=30printf("a=%d,a+1=%d\n",a,a+1);//a 是首行地址 步長是整個一維數組,也是整個一維數組的首地址 。(*一維數組首地址) 就是首元素地址,不理解可看一維數組地址分析。//*a 就是首行首元素地址,+1 跳過一個元素 步長 = 1*1 printf("*a=%d,*a+1=%d\n", *a, *a + 1);//盡管 整個二維數組地址、首行地址、首行首元素地址他們的值是一樣的,但是他們本質不一樣,也就是+1代表的步長不一樣!printf("整個二維數組地址:%d,首行地址:%d,首行首元素地址:%d\n",&a,a,*a);//我們知道*a代表二維數組首行首元素地址,那么**a 也就是首行首元素的內容了!//*(*a+0):第一個元素內容,*(*a+1):第二個元素內容,*(*a+30):第二行第一個元素內容,*(*a+31):第二行第二個元素內容。printf("**a:%c,*(*a+1):%c,*(*a+30):%c,*(*a+31):%c\n", *(*a + 0), *(*a + 1), *(*a + 30), *(*a + 31));//當然我們取第二行元素的內容,同樣可以使用第二行行地址來取。//a+1代表第二行地址,*(a+1):第二行首元素地址,*(a+1)+1:第二行第二個元素地址,知道地址就可以用*取出內容。//*(*(a+1)):第二行第一個元素內容,*(*(a+1)+1):第二行第二個元素內容。和上面取出來一樣,從側面也驗證了二維數組在內存中還是線性存儲的。printf("*(*(a+1)):%c,*(*(a+1)+1):%c\n", *(*(a + 1)), *(*(a + 1) + 1));//一維數組地址分析char b[30] = { "wxyz" };//&b 代表的是整個一維數組的首地址,+1 表示跳過整個一維數組 步長=1*30 = 30。//相當于二維數組的數組名a 代表的數組首行地址 a+1 步長是整個一維數組的長度。// *a 等價于 *(&b) b也就是數組首個元素的地址,所以*a +1是跳過一個元素。printf("&b=%d,&b+1=%d\n", &b, &b + 1);//b 也就是一維數組名 代表首元素地址,+1 跳過一個元素 步長=1*1=1printf("b=%d,b+1=%d\n",b,b+1);//知道b是首元素地址,那么*b就是首元素的內容了*(b+1)也就是第二個元素的內容了。printf("*b=%c,*(b+1)=%c\n", *b, *(b + 1));return; }

你有耐性看完么,雖然技術不咋地,但是我們仍然的需要努力。三維數組或者更多維的數組都是一樣的,我們只需要把數組名當做變量最近的那個[]方括號里面內容的地址就行了。比如char a[30] = "add";a代表的首元素地址char b[3][30]={"abc","bcd","ddd"},

b代表的是最近方括號是誰?是行,那么b代表的就是行的地址,三維的話,不知道叫啥,姑且就叫棟吧,就是棟的地址。然后在進行推導。

在主函數中調用它

驗證結果截圖


886了,下次見。



總結

以上是生活随笔為你收集整理的C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握)的全部內容,希望文章能夠幫你解決所遇到的問題。

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