C語言之旅(4)const

2021-08-10 12:39:04 字數 1312 閱讀 3756

在c語言中,const宣告的變數是唯讀變數,並不等同於常量。

const和define的區別是什麼?

1.對於define巨集,在c語言中是單純的替換。在預編譯階段就是完成全量替換操作,並不檢查對錯。

2.而const,程式在編譯的時候會檢查const的型別,如果不對的話,編譯會報錯。

3.const可以保護被修飾的東西,防止被意外或者惡意修改。例如函式中的傳引數,如果用const修飾的話,在函式內部是不允許修改這個引數的數值的。

const int a;和int const a;效果是一樣的,都是不允許在程式後續的執行過程中對變數a 的內容就行修改。所以說這個時候修飾的變數a應該盡量初始化,因為之後是不允許修改的。

int const *p;和int *const p;以及int const * const p;的區別?

1.const在*號的左邊說明指標p儲存的位址對應的記憶體空間裡面的數值不能改變;

2.const在*號右邊的話,說明p指標只能儲存剛開始初始化的時候儲存的位址,不能再次進行改變。

3.const在*的兩側都有的話就是上面兩種情況同事發生。

例如:int a=3;

int b=4;

int const *p1=&a;

這個時候p1儲存的是變數a的位址,但是const是在*號左邊的,(可以理解為,const修飾了p1的引用,即*p)那麼*p1=4;(x)不對的。但是p1=&b;(正確)

int * const p2=&a;

這個時候p2儲存的是變數a的位址,但是const實在*號右邊的,(可以理解為,const修飾了指標變數p1)那麼*p1=4;(正確)不對的。但是p1=&b;(不對)。這個時候p2只能儲存初始化的時候賦值的a的位址。之後將不能改變。

int const a=6;

int arr[a];這個在c語言中是不正確的,因為ansi c中規定,陣列中括號中的必須是常量,而在c語言中const a;中的a是唯讀變數,並不是常量,所以是不對的,但是在c++中確實正確的。

是不是const定義的變數就真的不能改變了?

答案是否定的,例如:int const a =9;

儘管變數a的數值不能直接改變,但是我們可以定義乙個指標儲存a的位址,然後通過位址進行改變。

int *p=&a;

*p = 12;

這樣a的數值就變成了12.

但是在c++中是不成立的。

A Tour of Go Go語言之旅

開發環境 win10 ide goland go version go1.13.5 學習時參考了 go簡易教程 教程用的1.3 安裝好go後,設定系統環境變數,發現已經自動新增了,好像是安裝過程中我勾選了 新建第乙個go檔案名字隨意,這裡就叫main.go 可能是go版本不同,在goland編輯好如...

c c 學習總結(4) const關鍵字

const這個關鍵字在c 被 過載 了很多次,寫在不同地方表示不同的意思。需要分別來說明 第一點 const修飾的變數一定要初始化,const變數的值在編譯時就要被確定,放在 段 的 rodata 中,如果在程式中顯示的修改const變數,會報編譯時錯誤,如果一些技巧來欺騙編譯器來修改const變數...

go語言之旅 二

package main import fmt func main if else if x 2 0 else num 1 多分支 go語言只有一種迴圈結構,即for迴圈。語法如下 sum 0 for i 0 i 10 i 注意 for語句後面沒有小括號。for語句前後兩部分都是可以省略的,如 su...