[C言語]複数文字リテラルの謎 その2

[C言語]複数文字リテラルの謎

以前書いたプログラムが別のシステムに移植したら動かなかったので、前回のソースを実行してみた

1:[000000000805d584]
2:[000000000805d59a]
3:[000000000805d5bc]
4:[0000000035363738]
5:[0000000000000038]
6:[0000000000000038]

なんていうか、""でくくった文字リテラルが文字列の格納アドレスになってしまった
もう訳が分からない(((・ω・))) 
つまり、この場合は *(long long*)"12345678" の様にすると8バイトの数値が返却される
最適化されずに、メモリ領域を確保して定数を保存してるためこのようになるらしい。
いや、むしろこちらが正しいのか?

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です