动态数组到两个函数

时间:2012-09-24 04:53:05

标签: c++

我创建了一个程序,它将使用一个动态数组,通过使用指针来查找用户将输入的整数集的最大值和最小值。

我实际上可以获得max的输出,但不是min;我发现我的动态数组在从max函数计算后会得到0,并使得min成为min的指定值的值。

我不知道为什么会这样 - 我尝试了很多方法,但是这些都没用,所以有人可以解释原因,如果可能的话提供解决方案或者给我一些如何通过解决方案的提示?


感谢您的回复

好像我的代码混淆了你的

抱歉

程序意图从整数量中获取最大和最小数字

从我想说的是从max函数计算完毕后,动态数组的数据将变为0,当程序经过min函数时,由于来自动态数组的数据,它不会运行已被设为0

所以实际上我想问的是,无论如何要使动态数组中的数据在max函数之后不会变为0?

抱歉我的英语不好

#include <iostream>
using namespace std;

void max(int*, int);
void min(int*, int);

int main()
{
   int *ptr;
   int i;
   int size;

   cout << "how many integer: ";
   cin >> size;

   ptr = new int[size];

   for (i = 0; i < size; i++)
   {
      cout << "integer#" << i << ": ";
      cin >> *ptr + i;
   }

   max(ptr, size);
   min(ptr, size);

   delete [] ptr;

   return;
}

void max(int* ptr, int size)
{
   int i;
   int j;
   int max = 0;

   for (i = 0; i < size; i++)
   {
      while (*ptr + i != 0)
      {
         j = *ptr + i % 10;

         if (j > max)
         {
            max = j;
         }

         *ptr + i /= 10;
      }
   }

   cout << max << endl;
}

void min(int* ptr, int size)
{
   int i;
   int j;
   int min= 0;

   for (i = 0; i < size; i++)
   {
      while (*ptr + i != 0)
      {
         j = *ptr + i % 10;

         if (j < min)
         {
            min= j;
         }

         *ptr + i /= 10;
      }
   }

   cout << min<< endl;
}

2 个答案:

答案 0 :(得分:1)

我不知道你使用了什么编译器,但是如果没有对我的GCC 4.6进行一些修改,你的代码甚至都没有编译。

  1. 所有*ptr + i变为*(ptr + i)
  2. return;末尾的
  3. main()变为return 0;
  4. 另一个问题是,在功能void min(int* ptr, int size)中,您正在将min初始化为0。你应该做的是int min = std::numeric_limits<int>::max();,以便min具有尽可能高的整数值。不要忘记#include <limits>

    这是一个代码,可以在不修改原始数组的情况下找到 最小数字 最大数字 (a好的做法),

    void max(int* ptr, int size) {
        int i;
        int j;
        int temp;
        int max = 0;
    
        for(i = 0; i < size; i++) {
            temp = *(ptr + i);
            while (temp != 0) {
                j = temp % 10;
                if (j > max)
                    max = j;
                temp /= 10;
            }
        }
    
        cout << max << endl;
    }
    
    void min(int* ptr, int size) {
        int i;
        int j;
        int temp;
        int min = 10;
    
        for(i = 0; i < size; i++) {
            temp = *(ptr + i);
            while (temp != 0) {
                j = temp % 10;
                if (j < min)
                    min = j;
                temp /= 10;
            }
        }
    
        cout << min<< endl;
    }
    

答案 1 :(得分:0)

这里的一个问题是运营商的优先权。

您正在尝试使用*ptr + i来访问第i个元素。 解除引用(*)具有最高优先级,并在添加之前进行评估。

*(ptr +i)或更常见的ptr[i]应该可以解决问题。