⑴ c語言字元串常量
常量有整型常量、浮點型常量、字元型常量及字元串常量。 『
字元串常量定義是指定義符號常量,用一個標識符來代表一個常量,通過宏定義預處理指令來實現。常量的定義:
#define count 60
這就定義了一個常量 count 它的值是一個常量60 在整個程序中不變。主調函數中的參數是實際參侍山腔數,被調函數中的參數是形式參數。
比如說:如下代碼段
被調函數:
int max(int a,int b)
{if(a>b)
return a;
else return b;
}
主調函數:
main()
{
max(a,b);
}
在北調函數max(int a,int b)中a,b是形式參數在主函數中max(a,b)中的a,b是實際參數。
擴展老衫資料
1、在C語言中沒有專門的字元串變數,如果想將一個字元串存放在變數中以便保存,必須使用字元數組,即用一個字元型數組來存放一個字元串,數組中每一個元素存放一個字元。
2、在程序中,字元串常量會生成一個「指向字元的常量指針」。當一個字元串常量出現於一個表達式中時,表達式唯巧所使用的值就是這些字元所存儲的地址,而不是這些字元本身。
3、可以把字元串常量賦值給一個「指向字元 的指針」,例如:char *a = "123" ; a = "abc";,後者指向這些字元所存儲的地址。
⑵ C中的字元串常量保存在哪裡是內存的堆區還是ROM中
不會是在 ROM里,這里無法寫入的
應該就是在內存中
⑶ C語言基礎問題:我們程序里定義的字元串常量都是編譯後是在內存里分配還是存儲在代碼區
是的。只不過初始化char數組的放在棧咐臘上,初芹簡櫻始化char*的放在嫌叢rsrc區段(可以拿peid查看)。
⑷ C語言,字元串指針指向的字元串,那個字元串存儲在哪個位置
你要位置,把內存地址彎敗都給你列印出來了。然後你怎麼又牽扯到常量了?動態申請的變數(即malloc函數申請的變數)存放在堆區!
idxbuf=malloc(6*sizeof(char));
動態隨機分配內存空間,共6個char型數據大小的空間,因為是隨機的,idxbuf指針指向的內存空間的起始地址在後面的語句中列印出來:
printf("before idxbuf address:%p,idxbuf:%s ",&idxbuf,
&idxbuf:取地址,%p與指針對應,是輸出指針的地址。
address:0x7ffeffc9f0b0,就是字元串指針idxbuf指向的念晌字元串存儲在內存中的地址位置。
你要字元串指針idxbuf的隨機分配的地址,只需要
printf("before idxbuf address:%p ",&idxbuf);
這一語句就可以了,原來的程序編譯有點問題,修改之後通過:
程序先編譯後鏈接,轉換成0與1的機器代碼後調入內存運行。這個問題被你牽扯到程序運行的內存分配方式,而不是你所說的想找字元串在內存中的地埋高顫址。請用內存分配方式詳解提問!
簡單的說,一個程序調入內存後,在內存中分為以下5個部分。
1、棧區(stack)
2、堆區(heap)
3、全局區(靜態區)
4、文字常量區
5、程序代碼區
內存分配詳細不說了,
因為我已經很明確的根據提問回答了字元串存儲的位置:address:0x7ffeffc9f0b0。
⑸ c語言中,常量是存放在內存中嗎
常量和變數是放在不同的"段"(section)里,程序衫納一旦載入,常量/變數自然都在內存里。
在程序的運行過程中,把需要處理的數據存放在內存早汪儲器中,稱始終保持不變的數據為「常量」,稱存放可變數據的存儲器單元為「變數」,其中的陸塌仔數據稱為變數的值。
整數是以補碼的形式轉換為二進制代碼存儲在計算機中。
實數是以IEEE754標准轉回換為二進制代答碼存儲在計算機中。
字元本質實際也與整數的存儲方式相同(先通過ASCII碼把字元轉換為對應的整數,再按整數以補碼形式轉換為二進制)。
(5)c程序中的字元串常量存放在哪裡擴展閱讀:
在除了『C/C++』的一些高級程序語言中,『常量』可以被稱作,「在一個信息變化過程中,始終不發生改變的量」,其可以是不隨著時間變化的某些量的固定信息;也可以表示為某一數值的字元(或字元串),常被用來標識、測量和比較兩者的差異。
但在 『C/C++語言中』,『常量』如果還用『運行過程中不變的量』來描述,就顯得不太准確了,甚至是在具體使用時,這就是一個錯誤的概念。在 『C/C++』中,定義『指針常量』時,根據『const 』的位置的不同,可以定義出幾個不同的形式,雖然其看起來『符合常量的概念』,但是在實際運行中,其值或地址值是會發生變化的。所以本質還不是『常量概念』
⑹ 字元串常量一般放在內存的靜態區嗎
這個不好說,不能明確說它放在什麼地方,給你舉個例子吧,用指針來舉個例子
定義一個字元串常量:char* p = "what are doing?"
那麼在這句話中,p和 "what are doing?"這兩個是不在一個存儲區上的,不過我認為字元串常量應該是存儲在正文段和數據段之間,也有人說是放在靜態存儲區上,也有人說是旁漏棚放在rodata 只讀數據段上,你可以自己從gdb上看一下。這里我給你一點資料你理解一下,我們一塊學習啊
這里是幾個存放數據的內存段:
1)正文段——CPU執行的機器指令部分;一個程序只有一個副本;只讀,防止程序由於意外事故而修改自身指令;
2)初始化數據段(數據段)——在程序中所有賦了初值的全局變數,存放在這里。
3)非初始化數據段(bss段)——在程序中沒有初始化的全局變數;內核將此段初始化為0。
4)棧——增長方向:自頂向下增長;自動變數以及每次函數調用時所需要保存的信息(返回地址;環境信息)。
5)堆——動態存儲。
這里還有一段有個高人寫的一段小程搜衫序,很詳細的
//main.cpp
int a = 0; 全局初始化區
char *p1; 全局未初始化區
main()
{
int b; 棧
char s[] = "abc"; 棧
char *p2; 棧
char *p3 = "123456"; 123456\0在常量區,p3在棧上。
static int c =0; 全局(靜態)初始化區
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得來得10和20位元組的區域就在運則堆區。
strcpy(p1, "123456"); 123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"
優化成一個地方。
}
⑺ c語言中字元型數據在內存中的存儲形式是
字元型數據在內存中儲存的是它的ASCII碼值,它是一個位元組,所有數據類型在內存中都是以0和1代碼二進制儲存的,這個原則不會變。
在C語言中,char型數據是將一個字元常量放到一個字元變數中,並不是把該字元本身放到內存單元中去,而是將該字元的相應的ASCII代碼放到存儲單元中。
編碼中,一個漢字字元存儲需要2個位元組。在UTF-8編碼中,一個英文字母字元存儲需要1個位元組,一個漢字字元儲存需要3到4個位元組。在UTF-16編碼中,一個英文字母字元或一個漢字字元存儲都需要2個位元組。在UTF-32編碼中,世界上任何字元的存儲都需要4個手明字首薯鉛節。
(7)c程序中的字元串常量存放在哪裡擴展閱讀:
由於標准 ASCII字元集字元數目有限,在實際應用中往往無法滿足要求。為此,國際標准化組織又制定了 ISO2022 標准,它規定了在保持與 ISO646 兼容的前提下將 ASCII字元集擴充為 8 位代碼的統一方法。
ISO 陸續制定了一批適用於不同地區的擴充 ASCII字元集,每種擴充 ASCII 字元集分別可以擴充 128 個字元,這些擴充字元的編碼均為高位為 1 的 8 位代碼(即十者好進制數 128~255 ),稱為擴展 ASCII 碼。