gpt4 book ai didi

c - (C) 为什么我可以访问超出给定限制的数组元素?

转载 作者:行者123 更新时间:2023-11-30 16:33:26 24 4
gpt4 key购买 nike

所以我已经学习 C 语言大约一年多了,在我的学习中我从未想过这是可能的:

#include <stdio.h>
#include <stdlib.h>

int main()
{
struct exterior
{
int x;
} *ptr;

ptr = (struct exterior *)malloc(sizeof(struct exterior[3]));
ptr[0].x = 1;
ptr[1].x = 2;
ptr[2].x = 3;
ptr[3].x = 4;
ptr[4].x = 5;
ptr[5].x = 6;

printf("%d %d %d %d %d %d", ptr[0].x, ptr[1].x, ptr[2].x, ptr[3].x, ptr[4].x, ptr[5].x);

return 0;
}

所以一开始我遵循C的规则;我将 3 个结构体数组元素所需的内存分配给结构体指针。我曾经使用指针来访问结构中的变量,同时使用索引来指定结构数组元素。

出于某种原因,我决定尝试访问超出给定限制的数组元素,即使我知道结果可能是程序崩溃,但我还是这么做了。

令我惊讶的是,没有发生崩溃。

相反,该程序有效。它毫无问题地打印出我赋予变量的值。这怎么可能?

后来,我尝试了 int大批。它也有效!我做错了什么吗?

最佳答案

当您在 C 上创建数组时,程序会分配所需的内存,并为您提供第一个元素的指针。因此,当您说 array[0] 时,您所做的是将 0 与该数组的基指针相加,因此 array[1] 向初始指针增加 1(更准确地说是 4 个字节),因此您可以看到2 个元素等等(不要忘记数组是一个连续的内存段,每个值都紧邻前一个值)。如果你尝试到达数组之外的位置,程序不会崩溃,它会做的是从它指向的位置读取内存,这在大多数情况下很可能是垃圾,但 C 对此没有问题,这种语言可以让你做几乎所有的事情!

希望有帮助:)

关于c - (C) 为什么我可以访问超出给定限制的数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49763703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com