新手入门,多谢大家
你要传回地址的话, 声明要改一下:
void max_min(int * a , int n , int &max, int &min);
使用了未初始化的指针
使用了未初始化的指针
抬头试着改一下 &max, &min
这代码写的愁人
指针都不是这么用的,还有作用域的概念没弄懂。这么写,指针需要下点功夫深入理解下,有本书《C和指针》推荐给你
int big,small; //指针没有地址,这么定义是最简洁的
void max_min(const int a[],const int n,int *max,int *min)
{
int i; //不要用指针,这是计算索引数的
//max = a; //你这是要干嘛?自己看看指针的概念
*max = a[0];
*min = a[0];
//for(i = &a[0]; i < a + n; i++)//你这是要干嘛??把索引跟内容弄混乱了
for(i = 0; i < n; i++)
{
//tmp = a[i]; //或者 tmp = *(a + i);
if(a[i] > *max)
{
*max = a[i];
printf("%d\n",*max)
}
}
}
1楼那个真是不懂,就不要乱说,这不是C++,形参不能这样写的,应该这样定义函数
void max_min(int *a, int n, int **max, int **min)
调用的时候是这样 max_min(b, N, &big, &small)
或者用另一种方式,修改big和small的定义
int big, small;
然后这样调用max_min(b, N, &big, &small),printf里用big和small,不用*big和*small
推荐第二种,更符合常规用法
用第二种方法的话,max_min函数里也要改
指针这个东西一定要初始化,而且如果你的函数要返回值的话,不应该是void
#include "stdio.h"
void max_min(int *a,int n,int *pmax,int *pmin)
{
int i = 0;
*pmax = a[0];//初始化一个最大值
*pmin = a[0];//初始化一个最小值
for(i = 1; i < n;i++)
{
if(*pmax < a[i])//每次循环找出较大的值,循环结束就是最大值
{
*pmax = a[i];
}
if(*pmin > a[i])//每次循环找出较小的值,循环结束就是最小值
{
*pmin = a[i];
}
}
}
int main()
{
int a[10] = {4,5,8,3,6,7,9,2,1,0};//数组初始化。
int len = 10;//数组长度
int int_max,int_min;//如果用的是指针需要初始化后才能用来保存数组
max_min(a,10,&int_max,&int_min);//使用&将max和min地址赋值到*pmax和*pmin形参中。
printf("the max is %d\n",int_max);
printf("the min is %d\n",int_min);
return 0;
}