Ⅰ c語言問題,有兩個問題,符號常量在整個程序中其值都不能再被重新定義這個為什麼不對
常量就是右值, 它在內存中沒有它的空間, 也就不能改變它的值, 或者可以這么說, 你就算改變了它也沒有任何價值, 而且這樣會對程序的一些地方的錯誤難以發現. 所以它是不能被改變的.
而符號常量和常量一樣, 它是不能被改變的. 但是它是有作用域的, 超過這個作用域就沒用了.
常量你可以理解成有作用域, 而它的作用域是整個程序.
Ⅱ C語言中為什麼常量和表達式不能進行自增自減運算
首先說表達式,我們要知道自增和自減的原理,從表象上看自增自減對一個變數的值進行+1或-1操作。但是深入到底層的實現原理,這兩個操作其實是對固定的內存地址內的值進行+1或-1。所以要能夠自增自減首先就要滿足有固定的內存地址,而對於表達式來說,最終表達式計算得到的結果如果不賦值給變數的話是沒有固定內存地址記錄這個值的。
再來說常量,雖然常量是有分配固定內存地址,但是常量的意義就是指『不變化的量』,所以說這是類型限定了常量是不能被改變的,如果能變,那就不是常量了。
Ⅲ C語言中變數與常量的概念是什麼
在C程序執行過程中,其值不發生改變的量稱為常量,其值可變的量稱為變數。它們可與數據類型結合起來分類。例如,可分為整型常量、整型變數、浮點常量、浮點變數、字元常量、字元變數、枚舉常量、枚舉變數。在程序中,直接常量是可以不經說明而直接引用的,而符號常量和變數則必須先定義後使用。
具體說明:
1、在程序執行過程中,其值不發生改變的量稱為常量。
①直接常量
整型常量:12、0、-3;
實型常量:4.6、-1.23;
字元常量:『a』、『b』。
②符號常量
標識符:用來標識變數名、符號常量名、函數名、數組名、類型名、文件名的有效字元序列。
符號常量:用標示符代表一個常量。在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。
符號常量在使用之前必須先定義,其一般形式為:#define 標識符 常量其中#define也是一條預處理命令(預處理命令都以"#"開頭),稱為宏定義命令(在後面預處理程序中將進一步介紹),其功能是把該標識符定義為其後的常量值。一經定義,以後在程序中所有出現該標識符的地方均代之以該常量值。
· 習慣上符號常量的標識符用大寫字母,變數標識符用小寫字母,以示區別。
【例3.1】符號常量的使用。#define PRICE 30main(){ int num,total;num=10;total=num* PRICE;printf(「total=%d」,total);}
· 用標識符代表一個常量,稱為符號常量。
· 符號常量與變數不同,它的值在其作用域內不能改變,也不能再被賦值。
· 使用符號常量的好處是:
含義清楚;
能做到「一改全改」。
2、其值可以改變的量稱為變數。一個變數應該有一個名字,在內存中占據一定的存儲單元。變數定義必須放在變數使用之前。一般放在函數體的開頭部分。要區分變數名和變數值是兩個不同的概念。
Ⅳ C語言整型常量轉化問題
首先要明白c語言的常量表達什麼?我們才能了解它的問題是什麼:
常量:其值不會發生改變的量,稱為常量。它們可以和數據類型接合起來分類。比如:整形常量,浮點型常量,字元常量等等,常量是可以不經過定義和初始化,而直接引用的。
常量分類:常量又分為:直接常量和符號常量。
直接常量又叫做:字面常量。如12,0,4.6,』a』,」abcd」
符號常量:如宏定義的:#define
pi
3.14
特點:常量的值在其作用域內不會發生改變,也不能再被賦值。其在出現時就被當作一個立即數來使用。也就是說,只能被訪問,被讀,而不能被寫,被賦值。
常量所在的內存空間就被加上了只讀的屬性,它有點類似於const關鍵字,那麼它常見的問題如下:
(1) 可以定義const常量,具有不可變性。
例如:
const
int
max=100;
int
array[max];
(2) 便於進行類型檢查,使編譯器對處理內容有更多了解,消除了一些隱患。例如:
void
f(const
int
i)
{
.........}
//編譯器就會知道i是一個常量,不允許修改;
(3) 可以避免意義模糊的數字出現,同樣可以很方便地進行參數的調整和修改。
(4) 可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。
還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;
例如:
void
f(const
int
i)
{
i=10;//error!
}
(5) 為函數重載提供了一個參考。例如:
class
a
{
......
void
f(int
i)
{......}
//一個函數
void
f(int
i)
const
{......}
//上一個函數的重載
......
};
Ⅳ 以下選項中關於C語言常量的敘述錯誤的是
既然是變數,那就不是常量。如果是常量,當然也就不能改變。
當然還有一種是const修飾的變數,比如const int a = 1;a的值也不能變,但不能說a是常量
按照不同的分類:
①常量分為整型常量、實型常量、字元常量和字元串常量
②常量可分為數值型常量和非數值型常量
然後你可以綜合的選下了,哈哈
Ⅵ 為什麼說C語言中常量不能改變可以改變啊,比如我寫代碼的時候,本來寫的7,現在改成5,這不就改了嗎!
首先,概念我就不再多說了了,首先從他們定義上去區別,定義一個變數,我們只需要「int a;」這樣就夠了,如果你要定義一個常量「const int a;」這樣很明顯是錯誤的,必須要給它賦值,要「const int a=1;」對吧。
接著,之所以說常量不可變,接著 我們來看一段代碼,判斷一下哪句話會引起報錯呢: typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 答案與分析: 問題出在 p2++上。 1)、const 使用的基本形式: const char m; 限定 m 不可變。 2)、替換 1 式中的 m, const char *pm; 限定*pm 不可變,當然 pm 是可變的,因此問題中 p1++ 是對的。 3)、替換 1 式 char, const newType m; 限定 m 不可變,問題中的 charptr 就是一種新類型,因此 問題中 p2 不可變,p2++是錯誤的。
再比如 下面定義了一個指向字元串常量的指針: const * ptr2 = stringprt1; 其中,ptr2 是一個指向字元串常量的指針。ptr2 所指向的字元串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。