巨集定義中的## 連線符與# 符
.這## 連線符號由兩個井號組成,其功能是在帶引數的巨集定義中將兩個子串(token)聯接起來,從而形成乙個新的子串。但它不可以是第乙個或者最後乙個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。具體的定義在編譯原理裡有詳盡的解釋,但不知道也無所謂。同時值得注意的是#符是把傳遞過來的引數當成字串進行替代。下面來看看它們是怎樣工作的
假設程式中已經定義了這樣乙個帶引數的巨集:
#define paster( n ) printf( 「token」 #n " = %d", token##n )
同時又定義了乙個整形變數:
int token9 = 9;
現在在主程式中以下面的方式呼叫這個巨集:
paster( 9 );
那麼在編譯時,上面的這句話被擴充套件為:
printf( 「token」 「9」 " = %d", token9 );
注意到在這個例子中,paster(9);中的這個」9」被原封不動的當成了乙個字串,與」token」連線在了一起,從而成為了token9。而#n也被」9」所替代。
可想而知,上面程式執行的結果就是在螢幕上列印出token9=9
不過需要注意的是,巨集是由編譯器在編譯階段識別的,所以不能指望程式執行時起到連線作用.比如:
int a0, a1, a2, a3;
for (int i = 0; i < 4; i++)
{a##i = i;
這種**就無法編譯了.
C語言字串結束符
0 就是8位的00000000,因為字元型別中並沒有對應的這個字元,所以這麼寫。0 就是 字串結束標誌。0 是轉譯字元,意思是告訴編譯器,這不是字元0,而是空字元。空字元 0對應的二進位制為00000000,而數字0為00110000 原來,在c語言中沒有專門的字串變數,通常用乙個字元陣列來存放乙個...
C語言 3 字串
字元陣列 char 看做乙個特殊的字元陣列,在字串結束為止新增 0 結束符 ascii碼0 沒有 0結尾的是普通的字元陣列。使用雙引號定義的字串自動在尾部加上 0 puts s 函式 輸出記憶體直至遇到 0 陣列變數名代表了陣列位址,例如char s 20 s就是陣列位址,不用 s gets s 函...
題目1490 字串鏈結
時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 63 解決 35 題目描述 不用strcat 函式,自己編寫乙個字串鏈結函式mystrcat char dststr,charsrcstr 輸入 兩個字串,字串由小寫字母組成。輸出 鏈結後的字串 樣例輸入 hello world good...