C++中在调用含有以数组为参数的指针函数时,如何保证数组数据的安全性?

来源:百度知道 编辑:UC知道 时间:2024/06/09 07:53:58
#include <iostream>
using namespace std;

int *max(int *,const int);

int main()
{
const int size = 9;
int a[size] = {3,2,1,4,9,7,6,5,8};
for (int i = 0;i < size;i++)
cout << "a[" << i << "] = " << a[i] << "\tAddress is: " << &a[i] << endl;

cout << "\nThe max unmber is: " << *max(a,size)
<< "\tThe unmber address is: " << max(a,size) << endl;

return 0;
}

int *max(int *a,const int b)
{
int *m = a;
for (int i = 0;i < b;i++)
if (a[i] > *m)
m = &a[i];
return m;
}
这段代码能正常运行,如果我想防止函数调用时无意中对这个数组里的元素进行修改(比如不小心将倒数第三行代写成:*m = a[i];这样这个函数同样可以找到这个数组中的最大值,但是它却修改了这个数组的首元素).所以我想把这个max函数声明写为:int *max(const int *,const int),那这个函数的定义该如何写呢(请尽可能少的改动上面的代码)?谢谢!
函数原型一定要是这个样子:int *max(const

int *max(int *a,const int b)
{
const int *m = a;
for (int i = 0;i < b;i++)
if (a[i] > *m)
m = &a[i];
return const_cast<int *>(m);
}

强转不是什么好事情,不过你一定要保持接口不变,又不能改太多,我只能想到这样写了

另外,你的题目里面函数的第一个参数是int *a,到了补充问题就变成了const int *,无论哪个都不影响下面的代码,选哪个你就自己决定吧