深入理解C中const int *a和int const *a的區(qū)別
在學(xué)習(xí)C語(yǔ)言過(guò)程中,經(jīng)常會(huì)遇到一些讓人頭疼的問(wèn)題。其中一個(gè)就是對(duì)于const int *a、int const *a、int * const a和const int * const a這幾種寫(xiě)法的混淆
在學(xué)習(xí)C語(yǔ)言過(guò)程中,經(jīng)常會(huì)遇到一些讓人頭疼的問(wèn)題。其中一個(gè)就是對(duì)于const int *a、int const *a、int * const a和const int * const a這幾種寫(xiě)法的混淆與辨析。下面將分享一些經(jīng)驗(yàn)和理解。
1. const int *a
這里const修飾的是int,表示a所指向的對(duì)象值不能通過(guò)*a來(lái)修改。但是可以重新給a賦值,使其指向不同的對(duì)象。也就是說(shuō),指針a本身是可變的,它可以指向其他的int類(lèi)型變量。
2. int * const a
這里const修飾的是a,表示a代表的是一個(gè)指針地址,因此不能賦給a其他的地址值。但是可以修改a指向的值,也就是*a的值是可變的。
3. int const *a 和 const int *a 的意義相同
這兩種寫(xiě)法的作用是等價(jià)的,都表示指針a指向的對(duì)象值是不可修改的。無(wú)論是int const *a還是const int *a,在使用時(shí)都不能通過(guò)*a來(lái)修改所指向的對(duì)象值。
4. const int * const a
這種寫(xiě)法表示a所指向的對(duì)象值以及它的地址本身都不能被改變。即指針a本身是不可變的,同時(shí)*a也是不可變的。
5. const 的左結(jié)合性質(zhì)
const是一個(gè)左結(jié)合的類(lèi)型修飾符,它與其左側(cè)的類(lèi)型修飾符組合為一個(gè)整體。所以,int const *a和const int *a的意義相同。int const *a限定的是*a,不是a(也即a可變,*a不可變)。同理,int *const a限定的是a,不是*a(也即a不可變,*a可變)。
總結(jié)
通過(guò)對(duì)const int *a、int const *a、int * const a和const int * const a的深入理解,我們可以清楚地理解這幾種寫(xiě)法之間的區(qū)別和作用。掌握了這些知識(shí),對(duì)于C語(yǔ)言的學(xué)習(xí)和應(yīng)用將更加游刃有余,成為你成功的不二選擇。