使用指针麻烦

Trouble using pointers

本文关键字:麻烦 指针      更新时间:2023-10-16

我制作了一个充满随机int的数组。我试图找出最大的&通过在两个不同函数中使用指针,其中最淡的元素。

,但我的问题之一是,当我比较找到最低元素时,我的数组中的第一个元素会更改为发现的最小值。

        // Compare to find min value
        min = array;
        for (int i = 0; i < size; i++)
        {
            if (*min > *(min + i))
                *min = *(min + i);
        }
        // show array using pointer
        ptr = resetArray;      // Fill int *ptr with original array
        for (int i = 0; i < size; i++)
        {
            std::cout << *(ptr + i) << std::endl;
        }

进行此比较后,将 *min值移至阵列的开始,以替换其中的第一个元素。

对不起,我的英语不好!

看起来您可能对指针的工作方式有误解(或者这是一个简单的错误)。

诸如int*之类的指针不是跟踪int的变量。int*指针允许您访问跟踪int的一些其他变量。指针"点"在其他内存位置;那就是他们的目的。

在您的情况下,min指向数组中的整数。min不是整数的单独存储空间。array[i] == *min不仅是因为它们碰巧具有等效的整数,这一事实。甚至更多,他们指向相同的内存位置。如果更改一个,则更改另一个,因为它们是同一内存位置。

假设您要保持当前的循环&amp;的指针样式,那就是要在数组上迭代并设置min(不是*min)等于迭代指针。那就是:

int* iterator;
for(...)
    if(*iterator < *min)
        min = iterator
    iterator += 1;

个人,我只会使用array[i]

访问数组

您让指针 min 指向数组的第一个值,因此该值被覆盖。相反,您应该将 min 声明为 array 元素的非销钉类型,例如:

    auto min = array[0];
    for (int i = 1; i < size; i++)
    {
        if (min > array[i])
            min = array[i];
    }

无论如何,由于使用C ,因此您可以考虑使用函数std :: minmax_element。