c - C 中的数组大小和地址

标签 c memory

当我编译下面的代码时,它显示 y 和数组的开头相隔 60 个单位。但根据我的计算,它应该是 4 * 10(对于数组)+ 4(对于 k)+ 4(对于 y)= 48。 array[12] = 17 也被分配给元素 12,因为没有元素 12,实现应该转到 y 并用 17 覆盖 y。然而控制台打印 y = 10 而不是......我真的很困惑......请帮助!

 #include <stdio.h>

 int main(void) {
    int x = 42;
    int y = 10;
    int k = 10;
    int array[10];

    array[12] = 17;
    printf("array starts at %d\n", &array[0]);
    printf("x has the value %d\n", x);
    printf("x is stored in location %d\n", &x);

    printf("y has the value %d\n", y);
    printf("y is stored in location %d\n", &y);
 }

最佳答案

这称为未定义行为(写入 10 元素数组中的数组 [12]),因此根据定义您无法知道它应该做什么。 C 中没有运行时检查,所以您可以写入任何您想要的地方(好吧,为了这个例子),您不知道到底会发生什么。

关于c - C 中的数组大小和地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481968/

相关文章:

c - 任务的 UML 表示

c - 错误./thrash : free(): invalid pointer

java - 为java项目指定eclipse中的ram量

c - 无法在没有 $DISPLAY for X11 的情况下自动启动 dbus-daemon。网 bean 。 Pi 作为远程主机

c - 从文本文件中读取字符并存储在二维数组中

c - 在玩具示例中使用 '\0' 进行 memset 的必要性

c++ - 如何减少将矩阵传递给函数的开销?

iOS黑屏大问题

.net - 定位托管 .NET 应用程序中的 native 内存泄漏,DebugDiag 缺少堆栈跟踪

c - 为什么这个数组中的值超出了范围?