在c中,在幾乎所有使用陣列名的表示式中,陣列名的值是乙個指標常量,也就是陣列裡第乙個元素的位址。它的型別取決於陣列元素的型別。只有在兩種情況下,陣列名並不用指標常量來表示,就是當陣列名作為sizeof操作符或者單目操作符&的操作時。sizeof返回整個陣列的長度,而不是指向陣列的指標的長度。取乙個陣列名的位址所產生的是乙個指向陣列的指標,而不是乙個指向某個指標常量值的指標。
int a[10]
;int b[10]
;int
*c;c =
&a[0
];
a的值是乙個常量,不能被修改。
除了優先順序之外,下標引用和間接訪問完全相同。
int array[10]
;int
*ap = array+
2;
這裡,ap[0]也是有意義的,等價於array[2]。
宣告乙個陣列時,編譯器將根據宣告所指定的元素數量為陣列儲存記憶體空間,然後再建立陣列名,它的值是個常量,指向這段空間的起始位置。宣告乙個指標變數時,編譯器只為指標本身保留記憶體空間,它不為任何整型值分配空間。
void
strcpy
(char
*buffer,
char
const
*string)
呼叫函式時實際傳遞的是乙個指標,所以函式的形參實際上是個指標,編譯器也接受陣列形式的函式形參。
int
strlen
(char
*string)
;int
strlen
(char string)
;
為什麼函式原型中的一維陣列形參無需寫出寫明它的元素數目,因為函式並不為陣列引數分配記憶體空間。形參只是乙個指標,它指向的是已經在其他地方分配好記憶體的空間。這個事實解釋了為什麼陣列形參可以與任何長度的陣列匹配----------它實際傳遞的只是指向陣列第乙個元素的指標。
#include
intlookup_keyword
(char
const
*const desired_word,
char
const
*keyword_table,
intconst size)
}return-1
;}
如果有可能,函式的指標形參都應該宣告為const。 C 學習筆記 指標2
關於指標形參的注意事項 不要企圖通過改變指標形參的值而使指標實參的值改變,看下面的 include void swap int p1,int p2 int main int a 5,b 9 int pa,pb pa a pb b if a b swap pa,pb std cout a b 要想輸入...
《c和指標》筆記2
列舉型別就是指它的值為符號常量而不是字面值型別.符號名被當作整型常量處理,宣告為列舉型別的變數實際上是整數型別。因此可以將任何整型變數賦值給列舉變數,但是應該避免這種方式使用列舉型別,因為把列舉變數同整數無差別的混合在一起使用,會削弱它們值的含義。浮點家族包括float double和long do...
《C和指標》學習筆記
define name length 30 define addr length 100 define phone length 11 define max addresses 1000 char const lookup address char const name char const loo...