|
- #include <iostream>
- using namespace std;
- int max_min(int num[100], int* max, int* min)
- {
- //计算num中数据的个数;
- [b]int m = 0;
- for (int i = 0; i <= 100; ++i)
- {
- if (num[i] != 0)
- ++m;
- }
- int num_size = m;[/b][/b]
- //寻找最大最小值;
- for (int i=0 ; i <= num_size; ++i)
- {
- *max= *max > num[i] ? *max : num[i];
- *min= *min< num[i] ? *min : num[i];
- }
- return *max, *min;
- }
- int main()
- {
- int num_1[] = { 8,34,54,54,100,109,16,7,18,23 };
- //int num_1[100] = { 1,2,3,4,5,6,7,8,9,88,77,66 };
- int a = num_1[0], b = num_1[0];
- max_min(num_1,&a,&b);
- cout << "最大值为:"<<a<< endl << "最小值为:"<< b << endl;
- return 0;
- }
复制代码
这个时代码,其中求数组数据个数的那部分,单独测试是可以的,但放一起后就出问题了;
本帖最后由 明月出天山 于 2020-2-15 13:48 编辑
试着回答一下,数组作为参数传递,在函数中是无法得到它的长度,可以在主函数中得到它的长度,作为参数传递到函数里,就可以解决问题了。
- #include <iostream>
- using namespace std;
- void max_min(int num[], int *max, int *min, int a)
- {
- // int m = 0;
- // for (int i = 0; i < 10; ++i)
- // {
- // if (num[i] != 0)
- // {
- // ++m;
- //
- // }
- //
- // }
- // cout << m << endl;
- //
- // int num_size = m;
-
- for (int i = 0; i < a; ++i)
- {
-
- *max = *max > num[i] ? *max : num[i];
- *min = *min < num[i] ? *min : num[i];
-
- }
- }
- int main()
- {
- int num_1[] = {8,34,54,54,100,109,16,7,18,23};
- int len = (sizeof(num_1)/sizeof(num_1[0]));
- int a = num_1[0], b= num_1[0];
-
- max_min(num_1, &a, &b, len);
- cout <<"最大值为:" << a << endl << "最小值为:" << b << endl;
- return 0;
- }
复制代码
因为传入到函数参数的是数组的首地址,int max_min(int num[100], int* max, int* min) 和主函数中数组的定义 int num_1[] = { 8,34,54,54,100,109,16,7,18,23 };
//计算num中数据的个数;
- [b]int m = 0;
- for (int i = 0; i <= 100; ++i)
- {
- if (num[i] != 0)
- ++m;
- }
- int num_size = m;[/b][/b]
复制代码
这段代码估计是数组下标越界,所以得不到正确的m值。
不知道分析的对不对,希望sky老师能看到,给出正确的解答吧。
|
上一篇: error C2143 error C2181下一篇: 不重启电脑修改IP
|