gccできめぇ実験.
ショートコーディングにおいて,大量の配列を宣言するとき
a['ZZZ'];
と宣言するテクニックがある.それを解析する.
プログラム
#include
int main(){
long long int a;
a='012';
printf("%x\n",a);
a='012345';
printf("%llx\n",a);
printf("%llx\n",'012345');
printf("%c %c %c %c %c %c\n",
( (char*)&a)[0],((char*)&a)[1],( (char*)&a)[2],
( (char*)&a)[3],((char*)&a)[4],( (char*)&a)[5]);
}
結果はこちら
303132
32333435
32333435
5 4 3 2
ちなみに30が'0',31が'1',・・・ である.
まじ,((char*)&a)[1]とかきめぇな.よい子は真似しないでね
まず,文字定数は4byte( sizeof(int) )であることが分かるだろう.
01はメモリ外で情報が消えている.
リトルエンディアンで"012345"の前4byteの値をとってきているのだろうか.
まぁ,そんな感じの値は出ている.
ちなみに,(long long int) '012345'しても4文字のままだった.
結論: 文字定数はint型.2文字以上書けるコンパイラもあるけど,書式守れよ?