#include
using namespace std;
/**
*函数功能:返回a和b的最大值
*a和b是两个整数
*/
int getMax(int a, int b)
{
return a > b ? a : b;
}
/**
int main(void)
{
//定义int数组并初始化
int numArr[3] = { 3, 8, 6 };
//自动调用int getMax(int a, int b)
cout << getMax(1, 2) << endl;
//自动调用返回数组中最大值的函数返回数组中的最大值
cout << getMax(numArr[3], 3 ) << endl;
system("pause");
return 0;
}
注:第二个cout并没有输出数组的最大值,不知道哪里出了错,求大神指点迷津。感谢!
getMax(numArr[3], 3 )这个参数不对,这块应该传递的是数组的初始位置numArr[0],应该就可以了。
一维数组作形参应传入数组地址,numArr
小明那个说的思路是对的,但是传值也不对,getMax(numArr[3], 3 )第一个参数不对,一维数组在传参时候应该传递一个指针,也就是数组第一个元素的地址,可以用数组名numArr代表第一个元素地址,也可以用数组第一个元素的地址&numArr[0]
指针的地址是从0开始的不是1.你应该把初始位置改成numArr[0]。
3 8 6 对应的地址是:
0 1 2
getMax(numArr, 3 )
将:cout << getMax(numArr[3], 3 ) << endl;
改为:cout << getMax(numArr[2], 3 ) << endl;
数组索引从0开始,3个数字,最大索引是2,你用numArr[3]明显越界了。
数组,其实是在模拟计算机底层的实现。做的是一个基准地址配合上偏移量的计算,实现对相应地址的索引。从而进行访问。所以,你传上去的Array[3]其实是只是一个第三个地方的地址。
还有,还存在一个问题,由于C++是较为底层的语言。所以,这个机制也是模拟计算本身的。还记得小于10的数是0 ,1 ,2,.....9而不包括10.
在计算机中,二进制地址0000~1111(具体长度是取决于相应的计算器硬件)所以其实是从0 开始数的。
要是你的数组只有3个的大小,要是你还直接来Array[3]那不就是越界了么?越界可能会造成很大的麻烦,所以编译器那些会在这里限制你,报错。
希望能帮到你,加油哦!