c語言問題,有兩個問題,符號常量在整個程式中其值都不能再被重新定義?這個為什麼不對

2021-04-30 14:52:00 字數 2255 閱讀 4018

1樓:末日高督

coust int n = 100;這個是常量,無法被修改.

/*分割線--------------------*/int i = 100,j = 200;

coust int *p = &i;//常量符號可以重新定義它的位址p = &j; //編譯通過

2樓:劉文正粉絲

常量就是右值, 它在記憶體中沒有它的空間, 也就不能改變它的值, 或者可以這麼說, 你就算改變了它也沒有任何價值, 而且這樣會對程式的一些地方的錯誤難以發現. 所以它是不能被改變的.

而符號常量和常量一樣, 它是不能被改變的. 但是它是有作用域的, 超過這個作用域就沒用了.

常量你可以理解成有作用域, 而它的作用域是整個程式.

3樓:零落丨絮丶

我也跟你有同樣的疑問,結果發現我們兩個的疑問是完全一模一樣,就是納悶這兩個為什麼乙個對乙個錯,我問了老師也上網查了一下,我大概理解了,我把我的想法跟你說一下。

首先"常量是在程式執行過程中值不能被改變的量"

常量就是乙個值,類似於10,20這樣的整型常量它本身就是不能改變的然而"符號常量在整個程式中其值都不能再被重新定義"為什麼是錯的可能你還沒學到或者沒理解"整個程式中"的意思,整個程式是由多個.c檔案組成,那麼每個c檔案都能定義乙個相同的符號常量,當你乙個c檔案同時引用兩個帶有符號常量的檔案時就會替換成乙個常量,那麼就會被重新定義,這是我的理解,希望能幫到你

c語言中,為什麼不能對字元指標變數指向的字串再賦值?

4樓:大野瘦子

因為抄c語言中,凡是以""括住的形式直接出襲現,而且你又沒有為其分配記憶體空間的字串都是常量字串,是不能修改其值的。

這樣:char a[6]="hello";

a[2]='c';

就可以了。

這裡你為hello分配了乙個長度為6的字元陣列空間來存放。

5樓:種令芮德曜

char*

a=為什麼不能修改,這個要涉及程序佔用的記憶體分段,大概分為**區,唯讀

區,全域性區專,堆屬區,棧區。"hello"作為乙個字串字面值,是被放在唯讀區,唯讀顧名思義就是不能修改的。char*

a="hello",相當於把hello的位址賦給了a,故而不能對a指向的內容進行修改。char

a="hello",這樣賦值的就是乙個字元陣列。字元陣列a是在棧區里申請的乙個空間給a,然後把唯讀區的"hello"進行了一次複製再賦值給a,這樣a的指向是能修改的。

6樓:匿名使用者

c primer plus 一書中寫到:「內容」為字串麵量,其被視為常量,故無法再進行修改。只能對其指標的值(改變位置)進行修改,不能改變其內容。

7樓:

這不是絕對的:

bai當指du

針指向的字串是zhi常字串時當然不能再賦dao值,因為目標是「常量專」,而當指標

屬指向的字串不是常字串時就可以再賦值,比如用動態申請記憶體方法建立的字串。具體說就是用char *p="abcqer12345";這種方法定義字串是不能通過指標改變內容的,原因是這個定義確定了abcqer12345是字串常量——因為char *p="abcqer12345";被編譯器解釋為「建立乙個字串常量abcqer12345,並把它的首位址(就是a的位址)賦給char *型指標p」——既然是「常量」,自然就不能更改。

8樓:匿名使用者

c語言bai中,凡是以""括住的形式直du接出現,而且你zhi又沒有為其分配內dao

存空間的字

符串專都是常量字串,是屬不能修改其值的。

char a[6]="hello";

a[2]='c';

就可以了。這裡你為hello分配了乙個長度為6的字元陣列空間來存放。

9樓:匿名使用者

char *a="hello";

''hello''是常量,所以a指向的是常量區,不能對於常量區的元素進行賦值

10樓:匿名使用者

char *a="hello";這個形式的定義是屬於字串常量,不可以修改的.

11樓:匿名使用者

不能修改!

char *p="hello";

相當於 const char *p="hello"

以這種方法初始化的字串是常量字串,而系統預設對常量賦初值後,其值無法被修改,否則會報錯,所以不能修改。

c語言的兩個簡單問題

1 看的這個裡面有一個a i,第一次迴圈的時候a本來就是賦值為0,再在輸出的時候還減了i,這時i是等於1,固a i就是 1了。接著迴圈,這時運算i 得i 2,再執行a i,a才等於2 2 這個很簡單看這個printf a d nc d n a,c 只要把前面的那個 n去掉就行了。1 for 語句裡有...

C語言問題,C語言問題4個

有for i 1 i 100 i 當執行的時候每次都要計算第乙個表示式嗎?是 2還有.i 1 i 這時i 2.再去計算sum 2.不就把1忽略了嗎 但是已經把i 1的情況計算過了 3順便請教下.for語句的執行過程是?如果形式為 a b c d 先執行a,判斷b是否成立,若不成立,則結束迴圈 若成立...

c語言問題,乙個c語言問題?

gcc是乙個著名的編譯器,屬於gnu編譯器套件,可以編譯很多種語言,一般用於編譯c c 程式,是linux下常用的編譯工具 編譯器只能說是一種翻譯 的程式,我們所熟知的dev c vs等其實屬於ide 整合開發環境 ide一般指包括了編譯器,編輯器等多種功能的軟體,功能比編譯器更加強大 linux下...