變數的定義包括乙個基本資料型別(
base type
)和一組宣告符。在一條宣告語句中,基本型別只能有一種,而宣告符的形式可以有多種。也就是說,在一條定義語句中可以定義出基本型別相同但是型別不同的變數。
// i是乙個int型的數, p是乙個int型指標,r是乙個int型引用
// 他們在同一條語句中宣告,基本型別相同,但是型別不同
int i = 1024, *p = &i, &r = i;
如上所述,在基本型別相同的情況下可以定義出不同型別的變數,指標,引用等。但是當把這些擴充套件宣告符組合使用時,理解起來就比較困難了。
int i = 42;
int *p;// p是乙個int型指標
int *&r = p;// r是int型指標的引用
要理解p的型別,最好的的方法是從右往左讀,r的左邊是&,說明r是乙個引用,再往左是int *,這說明r是乙個iny型指標的引用。簡單明瞭。
常量指標和指向常量的指標的區別
const double pi = 3.14;//pi是個常量,它的值不能改變,頂層const
double *ptr = π//錯誤,ptr是普通指標,不能指向常量
const double *cptr = π//正確:cptr可以指向常量,底層const
int errnumb = 0;
int *const curerr = &errnumb;//curerr的值不能修改,只能指向errnumb,不能指向其他值,頂層const
*curerr = 1;//但是可以通過curerr來修改errnumb的值
const double * const pip = pi;//pip是乙個指向常量的常量指標,pip本身的值不能更改,只能指向pi,而且也不能通過pip修改pi,左邊的const是底層的,右邊的const是頂層的
為了理解上面這段**,說下頂層const和底層const的區別
頂層const指的是該變數本身的值不能修改。底層const指的是使用該指標不能修改所指向的變數的值
理解常量指標和指向常量的指標也可以從右到左來理解,如
const double * const pip = pi;
pip的左邊是const說明pip本身是個常量,再往左是double*,說明pip是乙個指向double變數的常量指標,最左邊是const,說明pip是指向double常量的常量指標。pip只能指向pi而且也不能通過pip修改pi的值。 復合型別的宣告
1 複雜陣列 int a 10 1 int p 10 p是乙個陣列,含有10個整數指標的陣列 這裡定義的是乙個大小為10的陣列,它的名字是p,然後陣列中放的是指向int 的指標 int 2 int q 10 a q是乙個指標,q指向乙個含有10個整數的陣列。由括號括起來的部分 q 可知道q是個指標,...
指標和引用 復合型別的宣告
引用 引用是對物件起乙個別名,即相互繫結的意思,引用不像指標那樣可以指向不同物件,不可解綁,引用不是乙個物件,所以必須進行初始化。如 int a int b a 即b是a的別名,a的值也是b的值,改變a或b的值兩者值都會改變。引用只能繫結在物件上,不能繫結在字面值或某個表示式的結果上。如 int i...
C 資料型別 復合型別的理解技巧
復合型別的宣告符可以從右向左閱讀 最右側的是宣告符是直接型別 左側的宣告符是復合型別依賴的基本型別 const int p ci 表示p是乙個指標,const int表示指標指向的乙個常量int p是可以被重新賦值的,但是p指向的int不能被改變 int const p i const表示p是乙個常...