C語言中用單引號括起多個字元的問題

2021-10-09 22:51:11 字數 1271 閱讀 2824

『x』是字元常量,佔1位元組,"x"是字串常量,相當於』x』+』\0』,佔2位元組,這都沒問題,但怎麼理解類似 『abcd』 這種常量:即用單引號括起來的多個字元?以下是我的對這個問題的思考過程:

1、先看**:

char c1, c2, c3;

c1 = 'abc';

c2 = 'bcda';

c3 = 'cdab';

printf("c1=%d,c1=%c\nc2=%d,c2=%c\nc3=%d,c3=%c\n"

,c1,c1,c2,c2,c3,c3);

printf("%d\n",sizeof('a'));

printf("%d\n",sizeof('ab'));

printf("%d\n",sizeof('abc'));

printf("%d\n",sizeof('abcd'));

執行結果:

同時有3個警告,都是:

warning c4305: 「=」: 從「int」到「char」截斷

2、把c1、c2、c3的型別改為int,再執行,結果如下:

3、當試圖給c1賦值』abcde』時,編譯器(vc2010)報錯:

error c2015: 常量中的字元太多

4、用計算器檢視第2步中的c3的整數值,正好佔4個位元組,而且從高位元組到低位元組恰恰就是』c』『d』『a』'b』的ascii碼,各佔1個位元組;c2也一樣,c1最高位元組為 0000 0000;

結論:1、對於用 』 』 括起來的字元常量,vc2010按int型對待,分配4個位元組儲存空間,所以最多只能存4個字元,故允許有』a』、『ab』、『abc』、『abcd』的形式,但』abcde』就出錯;且這4個字元左邊字元存放在高位元組中,右邊字元存放在低位元組中;當只有乙個字元時,存放在最低位元組,其餘3個位元組補0;

2、當給char型變數分別賦值』abc』、『bcda』、'cdab』時,擷取最低位元組送給char型變數,即最右邊的字元,故有c1=c,c2=a,c3=b(所以有第一步的3個警告)

以上就是我對c語言中字元常量的理解。不知其它編譯器是不是也是這樣處理,以後用到別的編譯器再說。

單引號內存放多個字元

1 intmain 2 an ordinary character literal that contains more than one c char is a multicharacter literal.a multicharacter literalhas type intand imple...

單引號內存放多個字元

1 intmain 2 an ordinary character literal that contains more than one c char is a multicharacter literal.a multicharacter literalhas type intand imple...

C語言中雙引號與單引號的區別

1 含義不同。用單引號引起的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。而一般我們的編譯器採用的都是ascii字符集。因此 s 的含義其實和十進位制數115的含義是一致的。而用雙引號引起的字串,代表的是乙個指向無名陣列起始字元的指標。例如 分別檢視 yes yes ...