對於指標和陣列首先要注意:兩個指標之間的加法運算是非法的,但是指標的劍法卻是合法的。且對於陣列arr而言,&arr[-1]是絕對非法的,對於&arr[n]的間接引用也是非法的。但是c語言的定義保證陣列末尾的第乙個元素,即&arr[n]的指標算術運算可以正確執行。
千萬不要認為結構的長度等於各成員的長度的和。因為不同的物件有著不同的對其要求,所以結構中可能出現未命名的"空穴"(hole)。對於一下結構:
1struct
;
char佔乙個字元,int佔4個字元,該結構可能占用的是8個位元組而非5個位元組。使用sizeof運算子可以返回物件正確的長度。
自引用結構的使用方法如下:
1struct
tnode
2;
注意:乙個包含自身例項的結構是非法的,但是指向tnode型別的指標確是合法的。
自引用結構還有一種變體:兩個結構相互引用。使用方法如下:
1structt2
5structs6
儲存分配程式需要為不同的物件分配儲存空間,然而程式中只會有乙個儲存分配程式。假定用乙個分配程式來處理多種型別的請求,比如指向char型別的指標和指向struct tnode型別的指標,則會出現2種問題。1、他如何在大多數實際機器上滿足各種型別物件的對其要求(如:整型通常需要分配在偶數字址上)?2、使用什麼樣的宣告能處理分配程式必須能返回不同型別的指標問題?
對其要求一般比較容易滿足,只需要確保分配程式始終返回滿足所有對齊限制的指標就可以了,其代價就是要犧牲一些儲存空間。而對於返回不同型別的指標,上次通過完成乙個比較通用性的線性查詢,可以知道如果讓函式返回指向void型別的指標,然後再顯示地轉化為所需要的型別指標,這樣也可以滿足要求了。
今天的學習又結束了,明天繼續,加油!
C C 學習筆記 基礎知識11
1指標陣列和陣列指標 1 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32位系統下永遠是佔4個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱 int p1 1...
C C學習筆記
1.儲存型別 標準c語言為變數 常量 函式定義了4種儲存型別 extern,auto,static,register,它們分別用乙個關鍵字 儲存型別說明符 來說明。這4種儲存型別可分為兩種生存期限 永久的 即整個程式執行期間都存在 extern和static 和臨時的 即暫時儲存在堆疊和暫存器中 a...
C,C 學習筆記
1.求a的n次方 標頭檔案pow a,n a,n都為double 2.關於指標的一些小測試 includeusing namespace std int main int a 8 int m 3 cout 3.sort位於 algorithm 中,sort p,p n 預設公升序排列。4.inclu...