【发布时间】:2015-07-11 15:07:07
【问题描述】:
32 位系统中的字大小为 4 字节。 所以 char a='bcd';已验证。一个 32 位整数可以容纳 4 个 ASCII 字符。
char a='bcd';
//output is d for this line
printf("%c\n",a);
//output is 'z' when i use *(&a-1) and '�'(is -67 when manipulated)
printf("%c\n",*(&a-1));
现在我只想知道&a-1 (this is not 'b') 会指向什么?它是最后的内存地址吗?
还有一件事是将字符打包到int 中的顺序是什么。
------------------------------------------------------------------------------
| bits : _ _ _ _ _ _ _ 8 _ _ _ _ _ _ _ 16 _ _ _ _ _ _ _ 24 _ _ _ _ _ _ _ 32 |
| order : ? ? ? ? ? ? ? 8 ? ? ? ? ? ? ? 16 ? ? ? ? ? ? ? 24 ? ? ? ? ? ? ? 32 |
------------------------------------------------------------------------------
【问题讨论】:
-
'bcd'不是有效的单个char文字。可能您对字符串文字之类的东西感到困惑:"bcd"。 -
你不能这样做
char a = 'bcd' -
是什么让您认为
char的大小与32bit integer一样大? -
@user007 实现已定义!=未定义。关于
*(&a - 1),你认为它有什么作用?a是一个单独的字符,不管它是否有一些 impl.defined 值,它只是一个char。之前的内存地址不属于这个char。 -
@deviantfan 不要误会亲爱的,那不是给你的,那是给所有其他不赞成我并给我上一课的人的:P 不要介意 yaar....我是新的蜜蜂C 语言的世界。我正在使用 gcc 。
标签: c++ c memory-address