c - 丢弃 C 数组中的重复元素/超出数组边界

标签 c arrays

下面的代码丢弃数组中的重复元素。

#include<stdio.h>

int main() {
    int arr[5] = {1,2,2,3,5};
    int i, j, k, size = 5;


    printf("\nArray with Unique list  : ");
    for (i = 0; i < size; i++) {
        for (j = i + 1; j < size;) {
            if (arr[j] == arr[i]) {
                for (k = j; k < size; k++) {
                    arr[k] = arr[k + 1];  //line in question
                }
                size--;
            } else
                j++;
        }
    }

    for (i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }

    return (0);
}

在上面有问题的行中。当k = 4时,arr[k] = arr[k + 1];的右侧将超出数组边界。

我的问题是 arr[4] = arr[5]; 有效吗?为什么?

添加问题:

如果无效,为什么它有效?

代码来源:http://www.c4learn.com/c-programs/to-delete-duplicate-elements-in-array.html

最佳答案

My question is that is arr[4] = arr[5]; valid? And why?

由于您指出的确切原因,它是无效的:越界数组访问。

关于c - 丢弃 C 数组中的重复元素/超出数组边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758776/

相关文章:

c++ - 将字符串数组传递给多个进程的 for 循环中的 CreateProcess

c - 我有 24 个单独的位(1 或 0),想要用这些位形成一个大小为 3 的字节数组(形成 3 个字节),并需要一个指针

c - strtoull在C中正确使用

php - 使用 array_walk() 时是否需要这种技术

c - C 中的 fscanf 动态数组?

c - "Already defined in object file"和 "one or more multiply defined symbols found"

c++ - 这是怎么定义的?

c - 内联汇编的一些 "real-life"用途是什么?

c - GLFW3 : warning: implicit declaration of function ‘glGenBuffers’

javascript - 如何将值数组映射到对象数组