回覆列表
-
1 # 沒隆隆
-
2 # lee588
如果樓主是因為愛好C程式設計,在學習或程式設計實戰遇到這樣的問題的話,建議樓主再可以把C語言的基礎知識學紮實點。
C語言中的每種資料結構、變數、常量都有其應用範圍,針對樓主提出的問題,如果程式設計中使用字串常量,那我猜樓主的本意就是不想在程式執行中來修改這些常量,不論那本C教程中都對常量有描述,常量是在程式執行過程種不允許被修改的,這樣做的好處:一是可以對一些重要資料進行保護,二是可以節省程式的記憶體開銷。
如果樓主想修改字串建議使用陣列變數來儲存,其實歸根到底樓主還是要弄清楚變數和常量的本質區別,然後根據自己的實際需要來設計程式。
-
3 # 蟲蟲安全
常量就是就是值不能變化或者說值只讀的量。
C語言中有兩種形式的常量,宏定義和const常量。
宏常量我們定一個折扣discount為0.85:
#define DISCOUNT 0.85
宏定義是預處理,程式不會為它分配儲存空間,編譯器執行預處理的時候會把程式中遇到的所有DISCOUNT都替換為0.85。
const常量我們定義const常量,格式為:
const float DISCOUNT 0.85f;
我們對比知道const常量俱有型別,這是和宏定義的不同之處;還有就是const常量在編譯後儲存在一個全域性符號表中(或者靜態資料儲存區),其值只讀無法修改。
常量的作用常量作用就維護一個不能修改的變數。這樣防止被人亂改,主要用於程式一個全域性性質關鍵引數設定。比如你一個銷售系統的折扣,你設定好了就不能隨便更改。
還有就是一些數學上,物理學等一些常數直接記數字不是很方便就給它起個別名代替之。比如我們定義圓周率。
#define PI 3.1415926
注意:我們定義常量時候都是用的大寫,這是程式設計屆的一些需要墨守的成規。
字串常量最主要的好處是不可修改,其次還有佔用記憶體少,易於維護。
什麼是字串常量形如“string const”,被雙引號括起來的內容稱為字串常量。字串常量具有兩個性質,一是其中內容不可被修改,而是字串常量屬於靜態儲存類別,類似於靜態區域性變數,該字串在整個生命週期只會被儲存一次,即使函式被呼叫多次。雙引號返回的是字串的指標,指向儲存該字串的位置。
字串常量的獲取主要有陣列和指標兩種方式。
常量陣列
const char str[] = "Please Pay attention to my taotiao, Thanks";
新增const 說明該字串陣列是內容不可變的,如果不新增const,則說明該字串陣列是內容可變的,但是變動的是該陣列內容,並不是字串常量本身。
指標
const char *p = "Please Pay attention to my taotiao, Thanks";
指標p指向的是該字串常量的地址。
其實,這兩種形式並不完全相同。函式執行前,字串已經儲存在靜態儲存區。函式被呼叫時,才給陣列分配記憶體,將字串的內容複製到陣列中。因此此時多出一個字串副本,一個在靜態儲存區,一個在陣列中。
相對於指標,只會把字串的地址賦值給指標,記憶體中還只有一個字串,指標指向該字串的位置。
總之,陣列把靜態儲存區的字串複製到陣列中,而指標只把字串的地址複製給指標,簡言之,陣列複製內容,指標複製地址。
可以使用預定義,將字串常量進行縮寫,增加程式碼可讀性,便於維護。#define MSG "Please Pay attention to my taotiao, Thanks"
const char *p = MSG;