C数组,我的记忆会发生什么

时间:2012-05-21 07:33:42

标签: c arrays memory char

阅读器

有人可以向我解释当我运行这段假代码时,我的电脑会发生什么。 用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'会发生什么?我的记忆会发生什么?

2 个答案:

答案 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[] 开头的指针调用
  • adjust()

我不理解您对阅读data[1]的评论。在分配之前,它包含一些未定义的内容。

在大多数体系结构中,

char x = '10';char x = '0'相同。这是c ++行为的背离。 char表达式主要作为整数处理,然后在存储时隐式进行类型转换。