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
是指向常量对象的常量指针。