1樓:細雨在微笑
對的,你干預不了,編譯器決定的。
2樓:匿名使用者
對的,字串常量在記憶體中的存放位置由系統自動安排,人為是無法決定的。
3樓:網友
不自動安排你怎麼指定位置啊?所謂「系統自動安排」這個問題就比較弔詭,到底哪個系統在安排?實際上基本上所有位址的分配都是系統自動安排的,這個題目很外行。
4樓:泰格鼈
關鍵的是,常量和變數是放在不同的 段 (section)裡,程式一旦載入,常量/變數自然都在記憶體裡了。常量和全程變數,通常放在初始化段;區域性變數,通常在棧裡;還有一種情況,比如彙編裡的立即數(mov ax, 12),它是直接放在指令裡的,也即是**段裡。
5樓:陽光的雷咩咩
對和錯,感覺對程式執行沒什麼影響,這種題就是扯淡。
6樓:桃花源不知年
存放為執行函式而分配的區域性變數、函式引數、返回資料、返回位址等; 2、其操作方式類似於資料結構中的棧,堆區( heap ) 一般由程式設計師分配,字串常量。現在來解釋:字串就是string型別定義的。
j**a中字串常量放在**
7樓:風聲水影淚痕
str1和str2分別。
建立兩個物件 hello物件和str引用物件。
兩個必須存放在堆中。
str指向堆中的hello物件。
也就是說 兩個物件和str的位址全部存放在堆中。
string str="abc"; *引用資料型別肯定存放在堆中 棧中放置的是引數變數而不能放物件 物件只能放在堆中。
它只建立乙個物件 在堆中建立乙個對string類的物件引用變數str(引用變數肯定是存放在堆裡的),然後查詢棧中是否有"abc",若沒有則將"abc"存放進棧,並令str指向"abc",若已經存在則直接令str指向"abc".(也就是說引用變數本身只能存放在堆中 它的值是所指向的字串abc 它的位址存放在棧中) 它建立多個"abc"字串在記憶體中其實只存在乙個物件而已,這樣有利於節省記憶體空間同時在一定程度上提高程式執行速度。
string str=new string("abc");*所以通過new操作符的操作都是在堆完成的。
它建立兩個物件 abc物件和str引用物件 兩個必須存放在堆中 str指向堆中的abc物件 也就是說 兩個物件和str的位址全部存放在堆中 因為使用了new操作符 所以下面的例子裡str2,str3和str4即使是值都為abc因為str2的位址在棧中 str3和str4的位址各自開闢空間 所以他們的位址肯定不一樣了。
但是它們的值是一樣的 那就是abc
string str2 = "abc";
string str3=new string ("abc");
string str4 =new string ("abc");
表示堆中的引用變數的值是否相同(引用型別變數比較的是他們本身的值,本身的值是通過引用變數位址指向的物件或字串來得到的,不管這個被指向的字串或者物件是在棧中還是堆中)
當equals為true時,==不一定為true;
8樓:小童鞋_成
這個是在記憶體中存放的位址,你必須才可以判斷的。
你可以輸出位址看看,你這樣比較的是兩個位址,當然是false了。
第乙個直接快取 資料共享hello,是true。
9樓:千鋒教育
/** 看程式寫結果。
字串如果是變數相加,先開空間,在拼接。
字串如果是常量相加,是先加,然後在常量池找,如果有就直接返回,否則,就建立。
public class stringdemo4}
10樓:網友
第一種方式首先在棧中建立乙個變數 str1,str2,然後通過引用去字串常量池中查詢是否有"hello"字串,如果沒有則將"hello "字串存入字串常量池,並使 str1和str2 指向此常量。如果有此字串則直接指向。
第二種方式是用new來新建物件,存放在堆中,每次呼叫都會新建乙個物件。不會指向同乙個引用物件。
11樓:站住放開姐姐
但是堆區物件中也有乙個引用,那麼著兩個物件裡的引用指向的是同乙個並且存放在資料區中的那個hello麼?
不是同乙個,指向的堆疊不一樣。
還是每乙個物件各自引用乙個hello,如果是這樣那麼這個hello又放在**?
在記憶體裡新開了一塊地方存這個hello
12樓:網友
不是同乙個,資料就在堆裡面啊,每乙個物件都在堆裡有乙個hello
13樓:養初厹
自己試驗一下的好。
注意兩個問題 乙個是string的equals方式是被重寫過的。預設情況下 equals 就是==
第二只要是new操作必然產生新物件,以及物件對記憶體位址的引用。
因此str1==str2 為false 但是equals卻是true而str1 和 2 是兩個記憶體位址,指向的記憶體物件也是2個string str1 = "hello";此方式jvm會在new string的時候進行乙個判斷,如果已經存在那麼會直接指向那個位址。因此字串的操作要比stringbuffer操作字串慢很多。
字元型常量在記憶體中存放的是?
14樓:竇蕾買嫻
a,,,bcd碼是十位二進位碼旦賣旁,也就是將十進位的數字轉化為二進位,但是和普通的轉化有一點不。
同,每乙個十進位的數字0-9都對應著乙個四位的二進位碼,對應關係如下:
十進位0對應。
二進。制0000
接下來的10就有兩個上述的碼來表示。
表示為。也就是bcd碼是遇見1001就產生進位,不象普通的二進位碼,到1111才產生進位10000
計算機內碼是以16位二進位的數字表示的,也就是兩個位元組長。計算機內進行檔案資訊的儲存、傳輸等處理就是對這些內碼的處理。
在現行計算模橡機gb、big5和unicode編碼系統上能衍生的中文配敏字數、字形非常有限,而且必須通過外掛系統和大量的記憶體處理。
字串常量一般放在記憶體的靜態區嗎?
15樓:香克斯桑
這個不好說,不能明確說它放在什麼地方,給你舉個例子吧,用指標來舉個例子。
定義乙個字串常量:char* p = "what are doing?"
那麼在這句話中,p和 "what are doing?"這兩個是不在乙個儲存區上的,不過我認為字串常量應該是儲存在正文段和資料段之間,也有人說是放在靜態儲存區上,也有人說是放在rodata 唯讀資料段上,你可以自己從gdb上看一下。這裡我給你一點資料你理解一下,我們一塊學習啊。
這裡是幾個存放資料的記憶體段:
1)正文段——cpu執行的機器指令部分;乙個程式只有乙個副本;唯讀,防止程式由於意外事故而修改自身指令;
2)初始化資料段(資料段)——在程式中所有賦了初值的全域性變數,存放在這裡。
3)非初始化資料段(bss段)——在程式中沒有初始化的全域性變數;核心將此段初始化為0。
5)堆——動態儲存。
這裡還有一段有個高人寫的一段小程式,很詳細的。
int a = 0; 全域性初始化區。
char *p1; 全域性未初始化區。
main()
16樓:網友
linux中還有windows下的gcc編譯器中有乙個size工具,不知道你用過沒有,這個工具可以檢視當前你的程式的所有段的大小,你先定義兩個字串常量用size測一下,然後再在**中新增乙個字串常量,然後再測一下,就會發現只有text段增加了,也就是說在編譯期text和rodata段已經合到一起了。
c中的字串常量儲存在**?是記憶體的堆區還是rom中?
17樓:萍水e相逢
不會是在 rom裡,這裡無法寫入的。
應該就是在記憶體中。
18樓:旅初彤
是記憶體的堆區,rom那個是韌體,你自己寫的程式怎麼會存在rom中?
字串常量在記憶體中儲存是佔的單元數怎麼算?
19樓:教育愛好者
將所有字元的總數最後再加1,因為字串最後會有個'\0',這是系統自動加上的。由於字元佔的記憶體單元數為1byte,所以這樣計算。如果有漢字,就要對應漢字乘以2,因為漢字佔2個位元組。
char型字元構成的字串。
如:"hello12345",共10個字元,但是因為最後還有乙個隱含的'\0'用來標誌結尾,所以共佔11個位元組。pc機中,1個位元組(byte,簡寫b)中含8bit,所謂bit就是可以儲存0或者1的基本儲存單元。
20樓:
"china"佔6個位元組,最後乙個位元組存放'\0'字元,表示字串結束。
c語言基礎問題:我們程式裡定義的字串常量都是編譯後是在記憶體裡分配還是儲存在**區?
21樓:匿名使用者
是的。只不過初始化char陣列的放在棧上,初始化char*的放在rsrc區段(可以拿peid檢視)。
如何判斷字串中存在另外字串java
肖颯盤靈韻 1 public intindexof int ch string str 用於查詢當前字串中字元或子串,返回字元或子串在當前字串中從左邊起首次出現的位置,若沒有出現則返回 1。2 public intindexof int ch string str,intfromindex 該方法與...
未結束的字串常量,ASP 未結束的字串常量
程式不完整!if request action login thenusername request username password request password set rs server.createobject adodb.recordset rs.open sql,conn,3,3 ...
c中字串引用的問題,C 中字串引用的問題
c的字串實質是char型陣列,陣列沒有引用,c也沒有引用型別,所以不能引用傳遞。c 相容c的char型陣列,c 雖有引用型別,但陣列沒有引用的規則仍然有效,所以也不能用引用傳遞char型陣列。c 的字串是類string的物件,類物件是允許引用的,所以c 的字串物件是可以引用傳遞的,以下 可以佐證 i...