C語言中const的用法
const:在定義變量時,如果使用關鍵字const,那就表示限制這個變量值不允許被改變。
(1) 修飾變量
const離誰越近,誰的值就不能改變.
int const a=0 聲明一個變量a,把0賦值給a,用const修飾之后,a再也不能被賦其他值。此時int const a=0等價於const int a=0。
注:int const a;
a=0;
這樣的寫法是錯誤的,因為a已經被const修飾,不能被賦值了。
(2) 修飾指針
int const *p=&a
聲明一個int類型的指針p,內存為p分了一個單元,里面存的是一個整型數據單元a的地址。*表示索引,*p就是根據a的地址找到該地址所對應的內存單元,取出里面存的值。*p的值就是內存單元p里的地址指向的值。然后const修飾了*p,表示那個整型數據不能被修改。也就是說整型單元a里的數據不能被修改。但是此時可以改p的值,p沒有被const修飾。
此時int const *p=&a等價於const int *p。
int * const p=&a
聲明一個int類型的指針p,內存為p分了一個單元,里面存的是一個整型數據單元a的地址。*表示索引,*p就是根據a的地址找到該地址所對應的內存單元,取出里面存的值。*p的值就是內存單元p里的地址指向的值。然后const修飾了p,表示內存單元p不能重新被賦值,只要p沒被釋放,p中存的只能是此時a的地址(p=&b就是錯誤的)。但是此時*p沒有被const修飾,所以我們可以通過*p來改整型單元a中存的值(*p=b;)。把b的值賦給a。
const int* const p
p的值被const修飾了,*p也被const修飾了。所以p的值不能被修改,*p也不能被修改(p=&b;*p=b;都是錯誤的)。
一維數組
數組:一組數據的整體。當你定義一個數組時,內存會為你分配一塊連續的存儲單元。數字中的每個數據都會依次存入這塊連續的單元中。
int a[4]={1,2,3,4};
聲明一個整型數組,該數組有四個元素,數組名為a,同時也是該數組的首地址。我們可以通過偏移量來訪問數組的每個元素。
數組指針和指針數組
數組指針:
聲明一個指針,然后讓這個指針指向一個數組。
int a[5]={0};
int *p=a;
讓p指向數組a。把數組的首地址a賦值給p。同樣我們可以用指針加上偏移量訪問元素(*(p+偏移量))。
指針數組:
定義一個數組,這個數組里存放的每個元素都是相同類型的指針。
int * p[4];
定義一個數組p,有四個元素,該數組的類型為int *(整型指針)。所以這四個元素的類型都是int *。
