C++菜鸟,刚接触不久,求大神指点一下这段代码。

#include
using namespace std;
/**
*函数功能:返回a和b的最大值
*a和b是两个整数
*/
int getMax(int a, int b)
{
return a > b ? a : b;
}

/**

  • 函数功能:返回数组中的最大值
  • arr:整型数组
  • count:数组长度
  • 该函数是对上面函数的重载 */ int getMax(int arr[], int count) { //定义一个变量并获取数组的第一个元素 int maxNum = arr[0]; for (int i = 1; i < count ; i++) { //比较变量与下一个元素的大小 if (maxNum<arr[i]) { //如果数组中的元素比maxNum大,则获取数组中的值 maxNum = arr[i]; } } return maxNum; }

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]那不就是越界了么?越界可能会造成很大的麻烦,所以编译器那些会在这里限制你,报错。
希望能帮到你,加油哦!