《C和指標》學習筆記2

2021-09-01 12:56:15 字數 1322 閱讀 4637

在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...