1.2
2[arry] = *(arry + 2) = arry[2]
1.3下標絕不會比指標更有效率,但指標有時會比下標有效。
結論:1.當根據某個決定數目的增量在乙個陣列中移動的時候,使用指標比使用下標產生效率更高的**。當這個增量是1並且機器具有位址自動增量模型時,這點表現更突出。
2.宣告為暫存器變數的指標通常比位於靜態記憶體和堆疊中的指標效率更高。
3.如果可以通過測試一些已經初始化並經過調整的內容來判斷迴圈是否應該終止,就不需要使用單獨的計數器。
4.那些必須在執行時求值的表示式較之諸如&arry[size]或(arry + size)這樣的常量表示式往往代價更高。
1.6傳址呼叫是通過傳遞乙個指向所需元素的指標來實現的,函式得到的是該指標的拷貝。
void strcpy( char *bugger, char const *string)
形參被宣告為指向const字元的指標有3個理由:
1.良好的文件習慣。觀察函式原型就能發現該資料不會被修改。
2.編譯器可以捕捉到任何試圖修改該資料的意外錯誤。
3.這類宣告執行想函式傳遞const引數。
如果函式需要知道陣列長度,必須將陣列長度作為乙個顯式的引數傳給函式。
1.8自動變數在預設情況下不初始化。如果自動變數的宣告中給出了初始值,每次當執行流進入自動變數宣告所在的作用域時,變數就被隱式的賦值語句初始化。所以注意時間開銷。
不完整的初始化會將省略的最後幾個初始值初始為0。
char message = "hello";
char *message = "hello";
上述**第1行為初始乙個字元陣列的元素,變數。第2行為初始乙個字串指標,指向該字串常量。
2.4
int matrix[3][10];
int *p[10] = matrix;
int *pi = &matrix[0][0];
int *pi = matrix[0];
2.5
作為函式引數的多維陣列
void func( int (*mat)[10] );
void func( int mat[10] );
以上做法為正確的,函式原型寫成下面這樣是不正確的:
void func( int **mat ); //error!!!
3.
建立指標陣列時,可以以矩陣的形式儲存,也可以以指向字串常量的指標陣列形式儲存。在矩陣中,每行必須與最長字串的長度一樣長,但其不需要任何指標。指標陣列本身要占用空間,但每個指標所指向的字串所占用的記憶體。
//矩陣
char const keyword[9]=
;//指標陣列
char const *keyword =
;
第4章 陣列和指標 8
4.3.1 建立動態陣列 陣列型別的變數有三個重要的限制 陣列長度固定不變,在編譯時必須知道長度,陣列只在定義它的塊語句內存在。雖然陣列長度是固定的,但動態分配的陣列不必在編譯時知道其長度,可以 通常也是 在執行時才確定陣列長度。與陣列變數不同,動態分配的陣列將一直存在,直到程式顯式釋放它為止。每乙...
C和指標讀書筆記 第8章(陣列)
1.陣列名的值是乙個指標常量,也就是陣列第1個元素的位址,它的型別取決於陣列元素的型別。記住是指標常量。2陣列具有確定數量的元素,指標只是乙個標量值。只有當陣列名在表示式中使用時,編譯器才為它產生乙個指標常量。在程式完成鏈結之後,記憶體中陣列的位置是固定的。3.你不能使用賦值符把乙個陣列的所有元素複...
第 章 陣列和指標
第 章 陣列和指標 現代c 程式應使用vector和迭代器代替陣列和指標,除非前二者不滿足對效率的特殊要求 陣列 陣列是由型別說明符 識別符號和維度組成的復合型別,能儲存一組某種型別的未命名物件 定義和初始化 型別說明符規定了存放於陣列中元素的型別 可使用除引用外的任意型別,包括陣列本身 陣列的陣列...