C 数组,我的内存会发生什么

标签 c arrays memory char

读者,

谁能向我解释一下,当我运行这段错误代码时,我的计算机会发生什么。 用gnu gcc编译器编译。在代码块中。

这是错误代码:

  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 data[5]

如果我尝试读取数据[1],我注意到它将返回最后一个字符。 '0''48'

所以我想知道,data[1] 中的“1”会发生什么以及我的内存会发生什么?

最佳答案

您使用像 10 这样的多字 rune 字有点令人困惑,这可能会增加您的困惑。像这样的一行会发生什么:

data[1] = '10';

是:

  • int 类型(不是 char,在 C 中)值 '10' 将被截断到 char
  • 结果值将分配给 data[1]

这个值到底是哪个值取决于编译器,因为文字比单个 char 所能容纳的要大。

如果您看到 0(在 ASCII 系统上数字为 48),这意味着 10 被截断为 0,这是存储的值。然后,1 完全丢失(没有存储在数组的相邻槽中,这可能是您所期望的)。

关于C 数组,我的内存会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10681107/

相关文章:

c - 为什么 C 预处理器不忽略它跳过的 block 中的无效指令?

c - 字符串输出数组是一个三叶草符号

c++ - 使用 C++ 分离数组中的奇数和偶数

c# - 为什么不能在数组内交换匿名类型的属性?

javascript - 我试图通过访问嵌套属性并检查它的属性值是否包含特定字符串来过滤数组中的项目

c - 如何将链表拆分为2个列表?

java - 在C++中,静态变量、动态变量和局部变量存储在哪里?在 C 和 Java 中怎么样?

android - Android 是如何管理内存的?

linux - 当我在启用 "memory leak"的情况下编译程序时,Valgrind 报告了 "-pg"?

c - 我的程序输出未在 C 中更新