gpt4 book ai didi

c - 从 int 数组中删除值

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

我编写了这个小的 C 函数来从数组中删除整数。

/* remove `count` integers from `arr`, starting at index `idx` */
void remove_int(int (*arr)[100], int idx, int count)
{
int i, j;

for (i = 0; i < count; i++)
for (j = idx; *arr[j]; j++)
*arr[j] = *arr[j+1];
}

假设我这样运行它:

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

remove_int(&arr, 7, 2);

我遇到了段错误。为什么?

编辑 Comment通过 BLUEPIXY解决了,answer通过 chqrlie解释了它。谢谢大家!

最佳答案

您的代码没有按照您的想法行事:

  • arr 被定义为指向包含 100 个 int 元素的数组的指针。
  • arr[j] 不指向偏移量 j 处的元素,而是指向指向的数组中的第 j 个数组通过arr
  • *arr[j] 取消引用位于 arr[j][0] 的整数,远远超出 arr 数组的末尾来自调用函数。

如果你保持相同的API,你应该这样写代码:

/* remove `count` integers from `arr`, starting at index `idx` */
void remove_int(int (*arr)[100], int idx, int count) {
int i, j;
for (i = idx + count; i < 100 && (*arr)[i]; i++)
(*arr)[i - count] = (*arr)[i];
for (j = 0; j < count && i - count + j < 100; j++) {
(*arr)[i - count + j] = 0;
}

在 C 中处理指向数组的指针并不是惯用的,更常见的是直接传递数组,被调用的函数接收指向数组第一个元素的指针。

函数会这样调用:

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

remove_int(arr, 7, 2);

函数可以这样写:

/* remove `count` integers from `arr`, starting at index `idx` */
void remove_int(int arr[100], int idx, int count) {
int i, j;
for (i = idx + count; i < 100 && arr[i]; i++)
arr[i - count] = arr[i];
for (j = 0; j < count && i - count + j < 100; j++) {
arr[i - count + j] = 0;
}

在这种情况下,[100] 数组大小被忽略,函数的行为与定义为 void remove_int(int *arr, int idx, int count )

关于c - 从 int 数组中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413397/

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