0 陣列和指標的前世今生

2021-07-10 18:28:48 字數 1350 閱讀 2588

//檔案1

int mango[100];

//檔案2

extern

int *mango;

//開始使用指標訪問檔案1中的陣列

上面的例子是型別不匹配錯誤,無法正常執行,錯誤和下面的例子相似

//檔案1

int mango;

//檔案2

對於extern int * mango; 當用mango[2]來訪問的時候,首先,會按照圖b所示對指標解引用,然後按照圖a對下標進行偏移並直接訪問,更為正式的說法:

1、取得mango的位址,提取儲存於此處的指標;

2、把下標所表示的偏移量與指標的值相加,產生乙個位址;

3、訪問上面的位址,得到int

指標

陣列儲存資料的位址

儲存資料

間接訪問資料,首先取得指標的內容,把它作為位址,然後從這個位址提取資料。如果有乙個下標[i],就把指標的內容加上i的偏移作為位址,從中提取資料

直接訪問資料,a[i],只是簡單的訪問a+i的位址取得資料

通常用於動態資料結構

通常用於儲存數目固定且資料型別相同的元素

相關的函式malloc/free

隱式分配和刪除

通常指向匿名資料

自身即為資料名

char* p = "abcdef";

int *pn = 2;//error

char a = "abcdef"

陣列和指標都可以在定義中使用常量字串初始化,機制卻不一樣。定義指標時,編譯器只是給指標本身分配空間,除非在定義的時候賦值乙個常量字串進行初始化。只有常量字串才可以如此,浮點數之類絕對不行。

ansi c規定,初始化指標時的常量字串為唯讀,如果試圖通過指標改變字串的值,會出現未定義的行為。

與指標相反,由常量字串初始化的陣列是可以修改的。

c專家程式設計

lzbus的前世今生

現在的工業匯流排中,rs485匯流排使用得十分普遍。rs485匯流排使用一對雙絞線實現一主多從的半雙工傳輸模式。但人們將這套匯流排應用在系統中時,會發現其攜帶的負載並不是理想的那麼多,傳輸距離也不盡人意 最讓人光火的是這套匯流排並不支援星形連線,且rs485的轉換晶元經常會莫明的損壞。在可燃氣體報警...

eMMC的前世今生

討論到emmc的發展歷程,必須要從介紹flash的歷史開始 flash分為兩種規格 nor flash和nand flash,兩者均為非易失性快閃儲存器模組。1988年,intel首次發出nor flash技術,徹底改變了原先由eprom和eeprom一統天下的局面。nor類似於dram,以儲存程式...

Wireshark 的前世今生

這是乙個無關技術的小故事。但是作為wireshark愛好者,了解一下這個軟體的前世今生也是極好的,誰不想在中午和同 ling 事 dao 一起吃飯的時候講個業內小故事,顯得自己業務精湛又品味不俗呢?故事要從20世紀90年代開始說起。那時的it業欣欣向榮 摩托羅拉正野心勃勃地實施銥星計畫 google...