我创建了一个程序,它将使用一个动态数组,通过使用指针来查找用户将输入的整数集的最大值和最小值。
我实际上可以获得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;
}
答案 0 :(得分:1)
我不知道你使用了什么编译器,但是如果没有对我的GCC 4.6进行一些修改,你的代码甚至都没有编译。
*ptr + i
变为*(ptr + i)
。return;
末尾的main()
变为return 0;
。另一个问题是,在功能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]
应该可以解决问题。