阅读器
有人可以向我解释当我运行这段假代码时,我的电脑会发生什么。 用gnu gcc编译器编译。在Codeblocks中。
这是假代码:
char data[5];
data[0] = '1';
data[1] = '10';
data[2] = '30';
data[3] = '50';
if(sizeof(data) == 5)
{
adjust(data);
}
sizeof(data)是5,因为我声明了 char数据[5] 。
如果我尝试读取数据[1],我注意到它将返回最后一个字符。 '0'或 '48'。
所以我想知道,数据[1]中的'1'会发生什么?我的记忆会发生什么?
答案 0 :(得分:3)
您使用10
之类的多字符文字有点令人困惑,这可能会增加您的困惑。这样的一行将会发生什么:
data[1] = '10';
是:
int
- 类型(不 char
,C)值'10'
将被截断为char
data[1]
。确切地说,这取决于编译器,因为文字大于单个char
中的文字。
如果你看到0
(在ASCII系统上数字48),这意味着10
被截断为0
,这是存储的值。然后1
完全丢失(不存储在阵列的相邻插槽中,这可能是您所期望的)。
答案 1 :(得分:1)
除adjust()
的影响外,发生的事情非常清楚:
data[]
分配了5个元素data[]
的大小与5 data[]
开头的指针调用我不理解您对阅读data[1]
的评论。在分配之前,它包含一些未定义的内容。
char x = '10';
与char x = '0'
相同。这是c ++行为的背离。 char
表达式主要作为整数处理,然后在存储时隐式进行类型转换。