gpt4 book ai didi

c - 如何在删除第一个索引中的元素后通过向左移动元素来减小数组的大小?

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:06 25 4
gpt4 key购买 nike

我对如何完成这项任务有点困惑。

假设我定义了一个大小为 5 的数组

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

然后我删除第一个索引中的一个元素,即 1

如何将元素向左移动,并将大小缩小 1 来完成此操作?

int array[] = {2, 3, 4, 5};

现在数组大小应该是 4,即我不希望最后一个索引 4 仍然包含 5,我希望删除最后一个索引以便数组大小为 4

我有这段代码,但顺序相反,但我认为它不对:

for (int i = sizeof(array) - 1; i >= 0; i--)
{
array[i-1] = array[i];
}

但我不确定下一步该去哪里。

我在 SO 上阅读了一些关于 malloc 的内容,但即使在看到代码之后,我也不确定如何使用它。

最佳答案

C 根本不允许您这样做,因为数组的大小不是在运行时决定的。

数组的内存是静态或自动分配的,这取决于您程序的某些细节。静态和自动分配的内存不受运行时变量或更改的“影响”,您可以在 C 无法执行以下操作时看到这一点:int breaks[some_runtime_variable]

如果您想了解更多关于 C 中的内存分配的信息,以及使用动态内存分配解决此问题的一些方法,请在此处查看我在 Quora 上的回答:http://qr.ae/htfYE

为了更具体地说明这个问题,herestack 的玩具实现在 C 中。

正如您从 push 和 pop 的实现中看到的那样,堆栈明确地将其当前大小作为结构的一个单独字段进行跟踪,这允许恒定时间的 LIFO 压入和弹出。

从技术上讲,堆栈在弹出时不会“收缩”,但如果您将堆栈实现视为黑盒,弹出时堆栈可能会收缩,推送时堆栈会增大。

关于c - 如何在删除第一个索引中的元素后通过向左移动元素来减小数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642701/

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