指針指向字符串首地址 c語(yǔ)言中,字符數(shù)組的首地址字符指針的地址也是第一個(gè)字符的地址嗎?為什么不一樣?
c語(yǔ)言中,字符數(shù)組的首地址字符指針的地址也是第一個(gè)字符的地址嗎?為什么不一樣?字符串常量的地址是字符串存儲(chǔ)在內(nèi)存中的一組地址。字符數(shù)組的第一個(gè)地址表示字符串的第一個(gè)元素的地址。字符指針是指向字符類(lèi)型的
c語(yǔ)言中,字符數(shù)組的首地址字符指針的地址也是第一個(gè)字符的地址嗎?為什么不一樣?
字符串常量的地址是字符串存儲(chǔ)在內(nèi)存中的一組地址。字符數(shù)組的第一個(gè)地址表示字符串的第一個(gè)元素的地址。字符指針是指向字符類(lèi)型的指針。字符指針沒(méi)有地址。定義字符指針變量時(shí),它將有自己的地址。Character pointer變量還保存一個(gè)地址,該地址可以指向單個(gè)字符元素或字符串。例如:char AA=getchar()char*p;//變量p有一個(gè)地址。P=&A//P保存變量A的地址,即P指向A。同樣,char A[20]=“English”char*P=A//P保存字符數(shù)組的第一個(gè)地址,即P指向數(shù)組的第一個(gè)元素。8位地址碼1-8表示:1、2、4、8、16、32、64、128。例如,撥1和2位到“開(kāi)”,對(duì)應(yīng)的地址是:1,2=3。球機(jī)的地址碼由球機(jī)的撥號(hào)開(kāi)關(guān)設(shè)置。球機(jī)上有一個(gè)撥號(hào)開(kāi)關(guān)。有的球機(jī)有6位數(shù)字,有的有8位數(shù)字,分上下兩排。球機(jī)的地址碼最好與監(jiān)控矩陣的輸入端口相對(duì)應(yīng)。它被設(shè)置為多個(gè)輸入通道的地址碼,波特率通常設(shè)置為2400,因?yàn)閾u桿可能出現(xiàn)在9600。當(dāng)球機(jī)旋轉(zhuǎn)時(shí),搖桿將站立,但球機(jī)仍在旋轉(zhuǎn)。波特率和控制協(xié)議可以在球機(jī)上設(shè)置為與矩陣一致,也可以在矩陣上設(shè)置為與球機(jī)一致。所有球機(jī)的波特率和控制協(xié)議應(yīng)設(shè)置為相同,以便它們可以由同一設(shè)備控制。
球機(jī)地址碼怎么算?
在字符串中,itself是轉(zhuǎn)義字符的開(kāi)頭,例如n,t。因此,如果要將itself的值添加到字符串中,則不能只使用一個(gè),而應(yīng)使用。換句話(huà)說(shuō),也是一個(gè)轉(zhuǎn)義字符,表示的值。str中有五個(gè)元素,一個(gè)BN 2N和一個(gè)結(jié)束字符0。Strlen是5。
字符串定義時(shí)的兩條斜杠是什么意思?
雖然從常量區(qū)域復(fù)制到堆??隙ㄊ钦_的,但是復(fù)制兩個(gè)副本有點(diǎn)浪費(fèi)。畢竟,這個(gè)字符串只用于初始化局部變量。所以這取決于編譯器。
我測(cè)試過(guò)了。對(duì)于程序:
如果在64位WSL下使用GCC編譯,則字符串本身在指令中是硬編碼的。圖:
請(qǐng)注意,從字節(jié)0x17和字節(jié)0x25開(kāi)始的兩條指令的立即數(shù)實(shí)際上是“thing is a string”的ASCII代碼
對(duì)于Microsoft Cl,
此代碼實(shí)際上將字符串存儲(chǔ)在常量區(qū)域中,并在運(yùn)行時(shí)進(jìn)行復(fù)制:
此外,似乎clang也寫(xiě)入常量區(qū)域中然后復(fù)制。沒(méi)有那么多照片。