C++ 如何将整个数组指针作为常量传递,以使值无法更改?C++;

C++ 如何将整个数组指针作为常量传递,以使值无法更改?C++;,c++,arrays,constants,C++,Arrays,Constants,如何将整个数组指针作为常量传递,以使值无法更改?我将数组传递给如下函数: double myArr[] { 1, 2, 3, 4, 5 }; double* pArr = myArr; double myVal = MyFunc(pArr, 5); MyFunc当前的标题是: MyFunc(double* pArr, int length) 我想确保函数根本不能修改数组中的值 如何执行此操作?只需使MyFunc的参数采用(const double*pArr,int length)。将参数作

如何将整个数组指针作为常量传递,以使值无法更改?我将数组传递给如下函数:

double myArr[] { 1, 2, 3, 4, 5 };
double* pArr = myArr;

double myVal = MyFunc(pArr, 5);
MyFunc当前的标题是:

MyFunc(double* pArr, int length)
我想确保函数根本不能修改数组中的值


如何执行此操作?

只需使MyFunc的参数采用
(const double*pArr,int length)

将参数作为常量指针传递。函数签名如下所示:

double myArr[] { 1, 2, 3, 4, 5 };
double* pArr = myArr;

double myVal = MyFunc(pArr, 5);

double MyFunc(const double*arr,size\u t count)

将函数签名更改为:

MyFunc(double const* pArr, int length);
请注意,这相当于:

MyFunc(const double* pArr, int length)

你更喜欢哪一个是纯粹的品味问题(我更喜欢第一个,因为我发现它更可读——是
pArr
中的项目是常量,而不是指针本身)。

你可以通过常量指针传递它

MyFunc(const double* const pArr, int length); // pArr or content of pArr will not change
如果您有权传递
myArr
,请通过引用传递:

MyFunc(const double (&arr)[length]); // where length is known at compile time
如何将整个数组指针作为常量传递

就这么做吧

MyFunc(const double* pArr, int length)

你不必在这里招架。双myVal=MyFunc(myArr,5);同样有趣的是,关于
double const*
const double*
的答案的差异。它们对编译器的意义完全相同,因此没有正确的答案。
const
是在
double
之前还是之后是纯粹的人类偏好。指针常量等同于常量指针?我一直认为这是有区别的-指针const是指指针始终指向内存中的同一位置,可以用来更改内存内容,而const pointer是指指针可以更改并指向不同内存位置,但不能更改内存的基本val的位置?如果我错了,请纠正我…当typedefs开始应用于类型时,第一个版本的行为与预期的一样。这使得事情更加一致。但另一个是样式神。@Dhruv Gairola:它是常量。const总是绑定到左边(除非它是最左边的元素,否则它绑定到右边)
double-const*
double-const
是不同的。@Dhruv Gairola:指针本身可以更改(即不是常量),除非
*
后面有
常量。所以
const T*p
T const*p
都是指向常量对象的指针,
T*const p
是指向可变对象的常量指针,
T const*const p
是指向常量对象的常量指针。