gpt4 book ai didi

c - 自动调整数组大小,由自动计数初始化?

转载 作者:太空狗 更新时间:2023-10-29 15:11:29 26 4
gpt4 key购买 nike

<分区>

所以。我目前正在向一些大学水平的学生教授编程 1。我特别告诉他们去网上寻找引用资料,特别是我目前正在介绍的数据结构部分。今天,一位学生通过电子邮件向我发送了指向 tutorialspoint.com 的链接,并询问了他从那里提取的这段代码:

#include <stdio.h>

main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;

printf("The original array elements are :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}

n = n + 1;

while( j >= k) {
LA[j+1] = LA[j];
j = j - 1;
}

LA[k] = item;

printf("The array elements after insertion :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA[i]);
}
}

现在,在不知道它的确切位置的情况下,我不知道他们是如何描述它的,但显然它是插入到索引 k 处的值数组中,从 k 向上洗牌。

现在他问的是我告诉我的学生在做类似的事情时:

int arr[] = {1,2,3,4};

编译器将通过检查提供的值列表自动计算大小。这种情况意味着数组大小为 4 个元素。我还告诉他们,当数组第一次初始化时,数组大小是固定的,比如:

int likethis[5]; 
int orthis[] = {1,2,3,4};
int orlikeso[MAX_ARR_SIZE];

因此,要调整数组的大小,需要动态内存管理,这样您就可以为新数组声明空间(这是他们尚未学习的类(class)的一部分)。

但是本教程站点中的代码实际上似乎是由编译器使用初始化列表自动调整大小,然后在洗牌时在循环中愉快地调整它的大小。

因此,在他们的示例中,LA 的最终大小为 6 个元素。现在,我的学生想知道为什么这是有效的。我自己没有测试过这段代码,但根据我的学生的说法,它显然是在 GCC 上编译的。如果是这样,该代码如何有效?在洗牌循环中设置 LA[5] 时,这不会覆盖 LA 的边界吗?

问题:我是老头子吗,从很久以前就允许在C中这样做了?仅在海湾合作委员会?看到我在 80 年代的某个地方学习 C,我想我在这里可能是错的,但对我来说,它正在写超过 LA 的指定大小。只是想在 S.O. 上查看它。

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