数组名的地址,和数组名取地址的讨论
這個(gè)問(wèn)題的發(fā)現(xiàn)是在以下的代碼中發(fā)現(xiàn)的:
#include<stdio.h> int?main() {int?arr[2]={1,2};printf("%p",arr);printf("%p",&arr);return?0; }在運(yùn)行之后我們發(fā)現(xiàn)的數(shù)組名本身的地址和數(shù)組名內(nèi)部存儲(chǔ)的地址是完全一樣的,我們把數(shù)組名理解為一個(gè)const的指針(數(shù)組名只能作為右值,而不是左值),而&arr到底是什么?
我嘗試在之前的代碼中添加如下代碼:
????printf("%p\n",arr+1);printf("%p\n",(&arr)+1);在顯示窗口發(fā)現(xiàn),這通過(guò)指針的移位運(yùn)算的表現(xiàn)比較奇特:
第一個(gè)是按照一個(gè)int大小來(lái)移位的
第二個(gè)是按照一個(gè)sizeof(a)來(lái)移位的
這說(shuō)明 ,首先,它們都是指針,指針有兩個(gè)部分,一是所存儲(chǔ)的類型,二是指向內(nèi)存的地址,上面的實(shí)際現(xiàn)象表示,arr本身是一個(gè)指向數(shù)組第一個(gè)元素的指針,其指針類型是int*,第二個(gè)經(jīng)過(guò)取地址的運(yùn)算的指針是一個(gè)類型為int[2]*的指針。
一個(gè)剛剛進(jìn)入這個(gè)領(lǐng)域的大一新生,如有錯(cuò)誤,多多指教。
轉(zhuǎn)載于:https://blog.51cto.com/12050732/1883389
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的数组名的地址,和数组名取地址的讨论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: coreData数据操作
- 下一篇: recursive