1、檔案1:
定義: int mango[100];
檔案2:
引用: extern int *mango;
以上的做法是錯誤的,第一次定義的是陣列,在2 卻定義為 指標,就好像:
檔案1:
定義: int mango;
檔案2:
引用: extern float mango;
回顧:定義只能有乙個,建立乙個物件並為其分配記憶體。
int my_array[100];
宣告可以多次出現,是描述已經建立了的物件的型別,簡單的說明了在其他地方建立了這麼乙個物件,允許在此處使用。
extern int my_arry;
extern 物件宣告告訴編譯器物件的型別和名字,物件在別處定義,已經分配記憶體,因此不需要提供陣列長度,對於多維陣列,需要提供除最左一維外的其他維的長度。
2、 陣列和指標的訪問
每個陣列的位址在編譯時是可知,固定的,陣列名就是陣列的首位址(符號表中對應位址),當需要讀取乙個元素時,只需要直接進行操作(可能需要加上偏移量)。首位址+偏移量 —》取得 內容
但是指標的話,需要先執行取得他當前的值(不同處,額外的提取),然後才能進行操作。
取得指標內的位址 --- 》位址—》 取得 內容
申明指標,用陣列的方式應用的步驟
1、取得指標的位址,聽取儲存於此位址的指標 (陣列於指標的差別)
2、指標的的值加上偏移量,產生乙個新的位址
3、訪問該新的位址,取得字元。
3、定義指標時,編譯器並不為其所指向的物件分配空間,只是分配指標本身空間,用於存放位址,除非定義同時初始化乙個字串。
char *p =」daf sfa」; 只有字串,其他不能實現,但是該初始化的字串被定義為唯讀!!
Chapter 04 陣列和指標並不相同
陣列和指標是相同的 是一種非常危險 並不完全正確的說法。ansi標準 extern int x x是個int型的指標 extern int y y是個int型陣列,長度尚未確定 陣列定義不等同於指標的外部宣告的情況 檔案1 定義了乙個int陣列 int mango 100 檔案2 外部宣告的指向in...
C專家程式設計 第四章 陣列和指標並不相同
1 宣告和定義 宣告相當於普通的宣告 它所說明的並非自身,而是描述其他地方的建立的物件。定義相當於特殊的宣告 它為物件分配記憶體。例如 定義 int my array 100 宣告 extern int my array 指代其他地方定義的物件。二維陣列需要提供除最左邊一維之外的其他維的長度 2 x...
C 必知必會 賦值和初始化並不相同
賦值發生於當你賦值時,除此之外,遇到所有其他的複製的情形均為初始化,包括宣告 函式返回 引數傳遞以及捕獲異常中的初始化。假定其賦值操作符的函式如下,並且string中有乙個private的s 成員 string string operator const char str 對於內建型別來說,這兩個動...