指標修飾C語言const修飾符探秘指標修飾

2021-09-06 09:07:31 字數 2334 閱讀 8592

ps:今天上午,非常鬱悶,有很多簡單基礎的問題搞得我有些迷茫,哎,**幾天不寫就忘。目前又不當coo,還是得用心記**哦!

c言語是我接觸的第一門序程設計言語,時當還很傻很無邪,後來敏捷被各種高階言語**,但是不得不說,c的位置真的無可撼動。

const修飾符在c言語中很用常,但是近最讀**的時候常常搞不清楚,索搜了一番,做個結總。

const是常量修飾符,**中想法阻撓量變被轉變,這個時候可以應用const關鍵字。必須在宣告const量變就初始化,因此,相似與這樣的宣告是錯誤的:

const int i;

i = 8;

編譯器會報:error: assignment of read-only variable 『i』。

我們必需要這樣:

const int i = 8;
最基本的,護保被修飾的作用,避免之外改修

編譯器常通不為const常量配分儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存和讀取記憶體的作操,效率很高

使序程中的錯誤在編譯的時候就被報出(因為2)。

面下會一一舉例說明。

修飾通普量變

const int i = 8;

int const i = 8;

面下兩者是等價的,都是聲了明乙個值為5的常量。

修飾指標

const int *p;

int const *p;

面下兩個是等價的,都聲了明乙個const int型別的指標,也就是說,序程裡頭不能轉變*p的值,但是可以轉變p的值(即可以轉變指標的指向)。

int * const p = &n;
這個是聲了明乙個const的指標,const是修飾指標的。也即p的值不允許轉變(指標就定一得指向n那塊記憶體,不能轉變p的指向),但是*p的值可以轉變。

小巧技

首先要明白一點,非指標引數(值遞傳)傳給數函的是引數的乙份拷貝,本身就不會轉變引數的值,所以加上const是沒有意義的,例如:

每日一道理

微笑著,去唱生活的歌謠,不要埋怨生活給予了太多的磨難,不必抱怨生命中有太多的曲折。大海如果失去了巨浪的翻滾,就會失去雄渾;沙漠如果失去了飛沙的狂舞,就會失去壯觀。人生如果僅去求得兩點一線的一帆風順,生命也就失去了存在的意義。

#include void add(const int a)

int main()

雖然編譯過不去,但是,就算不加const,在數函體中勝利試嚐改修了a,但是在本例中temp的值也是變不的,因為數函中改修的是a的乙個拷貝(值遞傳)。

先看這個數函:

void foo(const int * p)

編譯時就會報錯,因為我們試圖改修乙個常量的值。

帶const的參形是不允許在數函體內改修其值的(唯讀)。

不過一旦這樣寫就沒轍了:

void foo(const int * p)

雖然編譯器編譯時會告知你:warning: initialization discards qualifiers from pointer target type,說你賦值丟了乙個性屬修飾符,但是執行時還是可以轉變p所指向記憶體的值。

再看這樣乙個例子:

void foo(int *const p1)
然顯編譯不過去。這樣做本來是想傳進來乙個const的指標,但實際上,這樣是沒有意義的。指標作為引數時也是傳進去乙個指標的拷貝。所以即使不加const,數函體中也是改修的這個「指標的拷貝」。這個數函實際上和本大節掃尾的例子是沒區分的(但是這個指標的拷貝所指向的內容可是和被拷貝的西東是一樣的)。

可以用面下的圖說明:

和這個是相似的:

文章結束給大家分享下程式設計師的一些笑話語錄: google事件並不像國內主流**普遍誤導的那樣,它僅僅是中國z府和美國公司、中國文化和美國文化甚至中國人和美國人之間的關係,是民族主義和帝國主義之間的關係;更重要的是,它就是z府和公司之間的關係,是權力管制和市場自由之間的關係。從這個意義上說,過度管制下的受害者,主要是國內的企業。google可以抽身而去,國內的企業只能祈望特區。www.ishuo.cn

const修飾符和指標

char const cpp1 null cpp1 char cp1 cp1 char c1 cpp1是乙個常量指標,所以cpp1需要在定義的時候初始化,它指向乙個char 型的指標cp1。char const cpp2 cpp2 char const cp2 const cp2 char c2 c...

C 中const修飾符

const只對它左邊的東西起作用 唯一的例外就是const本身就是最左邊的修飾符,那麼它才會對右邊的東西起作用。指標常量 關鍵字順序為 const 和中文順序一致 例如 int const a,表示指標a是乙個常量,初始化後不可更改 永遠指向某個物件 但是指向的物件的值可以修改,如 a 10 常量指...

const 型別修飾符

const是用來限定所指定的變數或者函式不可作修改。1 修飾變數 當const用來修飾變數的時候,const所指定部分不可修改。a.修飾常規變數 如 const int a 10 int const a 10 這兩種方式的效果一樣,都是將a描述為常量,a的值在被賦初值後不可以修改。但是這和由巨集定義...