c - 无效函数 : removing elements from an array?

标签 c arrays

我想创建一个从数组中删除元素的函数。

我尝试自己制作这个函数,但是没有完全成功:

void remove_element(int* array, int number, int array_length)
{
    int i, j;

    for (i = 0; i < array_length; i++){
        if (array[i] == number) {
            for (j = i; j < array_length; j++)
                array[j] = array[j+1];
            array_length--;
        }
    }
}

我注意到的第一件事是在 main 中调用函数后,array_lenght 没有改变,因此删除元素后数组的长度保持不变。

那么第一个问题是如何在 void 函数中改变数组的长度?

第二个不能正常工作的是,如果数组中有两个或更多相同的数字彼此相邻,例如,如果数组包含 1,1,3,4,5,6并且用户想要删除 1 函数将只删除一个元素。

我的输出示例(错误):

1,1,3,4,5,6 after fucntion 1,3,4,5,6

谢谢

最佳答案

在当前的签名中你不能修改数组,因为返回新的数组你还需要返回新的长度。

有很多方法可以做到,这里是一个单循环的方法:

void
remove_element(int* array, int number, int *array_length)
{
    int i, j;

    for (i = 0, j=0; i < *array_length; i++) {
        if (array[i] != number)
            array[j++] = array[i];
    }
    *array_length = j;
}

这样做,这将同时改变初始数组和在调用者中保持其长度的变量,并且您必须通过引用传递 array_length 的值,例如

int* some_array, some_array_length, n;

remove_element(some_array, n, &some_array_length)

其他方法是返回新长度并改变数组或在堆中分配一个新数组并返回分配的数组和新长度。

关于c - 无效函数 : removing elements from an array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984047/

相关文章:

c - 用户空间中的物理内存管理?

c - slider 拼图中的段错误

ios - 如何在 Swift 4 中将 UIImage 转换为字节数组

php - 将php数组转换成xml文件

javascript - 用数组形式的字符串初始化数组

无法将包含数据的数组添加到共享内存

c - 需要更多这方面的信息!中止(核心转储)

javascript - 拆分并保留数组中的子字符串

c# - 用数组初始化列表

c - 这是创建 C 函数的正确方法,没有返回语句,打开、写入、关闭文件吗?