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