c語言printf xyz 123 2 為什麼結果是z 123?

時間 2021-05-11 23:38:48

1樓:大熊哥哥

"xyz-123" 實質是乙個內容為 xyz-123 然後加上乙個 0 結尾的二進位制序列的開頭位址(相當於第乙個字元 x 的位址)。。於是 "xyz-123"+2 內容就是 z 這個字元所處的位置。

所以所以。。。。。

2樓:愛笑的逗逼

R大沒有在答案裡說,事實上對指標進行加減只會加減指標型別大小的倍數,請看圖:

此處可以看到只會輸出c,前兩個被位移移沒了。

printf是一樣的

3樓:灰太大

0x80001000 'x'

0x80001001 'y'

0x80001002 'z'

0x80001003 '-'

0x80001004 '1'

0x80001005 '2'

0x80001006 '3'

0x80001007 0

執行時,先將0x80001000壓入棧中,然後呼叫printf。

現在+2的話,則會把0x80001002壓入棧,再呼叫printf。

具體研究的話,可以用偵錯程式,在這句上設個斷點,然後進到反彙編裡面調一下,看一看引數是如何傳遞的。不同的編譯器,不同的cpu都不太一樣。具體實現要結合使用的平台了。

4樓:姚瑞

真相其實是這樣的:字串在C語言中的型別其實是字元陣列,既然是陣列,那麼在表示式中就會自動轉換成指向其首元素的指標(指標型別的值),那麼現在+2就是指標運算了。

5樓:噼噼啪啪粉兔子

printf在輸出前,先申請記憶體儲存「xyz-2」。

再進行此str首位址+2。

最後呼叫printf,按格式輸出str+2。

6樓:

傳給printf函式的引數實質是字串指標。

字串和數字加運算,返回新的指標,值就是字串首位址往後便宜n個位元組,此處n為2,於是往後偏移2位元組,首位址指向z。

7樓:李梓萌

你需要知道,C語言中字串的本質是什麼。c語言認為,字串是字元的指標。用%s輸出的意思就是,從這個指標指向的記憶體開始,逐個輸出字元,直到遇見\0為止。

所以,+2就是把原來的指標向後移動兩個char型別的空間。

8樓:lydhm

因為「blabla」這種用雙引號表示的東西,在c裡面是表示的是位址。型別是const char*,然後按照printf的邏輯。。。就變成了那樣。

9樓:James Swineson

C 語言沒有字串……說字串是習慣叫法,寫雙引號是語法糖。稍微高階點的語言往往是有真正的字串的。你的操作邏輯是真字串的操作邏輯。

10樓:小熊

1、printf是從首字母位址開始輸出乙個字串到\0結束。

2、"xyz-123" 相當於乙個指標,指向首字母的位址。

3、"xyz-123"+2 相當於P+2,等於把位址往後挪了兩位。首字母就成了z,從Z開始輸出,到\0結束。

4、如果你看不懂3是怎麼操作的,你需要去補字串和指標的知識。

11樓:

本來是print字串指標裡面的東西。但是你加了2,相當於把字串指標後移了兩位。指標就指向了第三個字元,所以是相當於,從第三個字元開始print

12樓:RednaxelaFX

因為:#include

intmain

(); char* str = &array[0];

char

*str2

=str+2

;// similar to: char* str2 = &array[2];

printf

("%p: %s\n"

,str

,str

);printf

("%p: %s\n"

,str2

,str2);}

輸出:0x10e62bf9e: xyz-1230x10e62bfa0: z-123

>_<要拼接字串的話請另外分配空間然後要麼顯式拷貝要麼用裡的strcat()。

C語言輸入123輸出321這個程式怎麼寫?

intserver int data return int n n?int n 0 NoneType include void function void intmain include using namespace std void function void intmain include i...

為學習C 打好C語言基礎,什麼算是C語言基礎?

懂得函式,懂得指標變數,懂得記憶體模型,懂得基本資料型別,懂得變數的生命週期,懂結構體,懂記憶體對齊。c基礎就那麼些,但是指標是真的爽。 leopard 先說結論,沒必要單獨去為了所謂的 基礎 去學習c語言。c 是c的超集,就像小學數學是高中數學的底子一樣。這句話本來沒錯,但是c 經過這麼多年的 發...

C語言可以幹些什麼?C語言主要涉及哪些IT領域?

runner time 一般人靠學C語言去工作比較難,但是學習C語言能幫你更深入地理解作業系統的底層,為進一步學習研究作業系統打下基礎。計算機學習是乙個系統性問題,不可偏廢。比如說光學程式語言但是不學數學,一定會遇到明顯的瓶頸。作業系統當然也是必然要深入的領域。而且很多語言的設計思路借鑑了C語言,可...