2017-03-09 69 views
-3

我制作了一个填充随机数的数组。我试图找出最大的& smalest元素通过使用两个不同的函数中的指针。使用指针的问题

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

 // 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值移动到数组的开头,替换数组中的第一个元素。

对不起,我的英文不好!

+0

你自己用'*分= *(分+ I)'改变它。 – ForceBru

+0

这正是'* min = *(min + i);'做的。你打算做什么? – Beta

+0

这就是如果你使用指针会发生什么。如果你不想修改数组,你需要一个独立变量来存储min。 – NathanOliver

回答

0

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

诸如int*之类的指针不是用于跟踪int的变量。一个int*指针允许您访问一些其他变量,它跟踪int。指针“指向”某个其他内存位置;那是他们的目标。

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

你可能想要做相反,假设你要保持你有你的电流回路&指针的风格是什么,是有一个单独的指针迭代阵列上,并设置min(不*min)等于迭代指针。那就是:

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

就个人而言,我只想访问阵列array[i]

0

你让指针指向数组的第一个值,因此这个值被覆盖。相反,你应该声明分钟作为非指针类型阵列元素的,例如:

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

在任何情况下,因为使用C++,则可以考虑使用函数std::minmax_element