答案:const修饰数组指针时,若修饰数据则数据不可改,若修饰指针则指针不可变,两者均可同时使用以确保安全。
在C++中,数组指针与
const
修饰符的结合使用常用于保护数据或明确函数参数的意图。理解它们的组合方式对编写安全、清晰的代码非常重要。
指向const对象的数组指针
当指针指向的数据是不可修改的,应使用
const
修饰目标类型。
示例:
const int arr[] = {1, 2, 3};
const int* ptr = arr;
这里
ptr
指向一个整型常量数组,不能通过
ptr
修改元素值。比如
*ptr = 5;
会编译错误。
立即学习“C++免费学习笔记(深入)”;
const指针指向数组(指针本身不可变)
若希望指针始终指向同一数组,可将指针定义为
const
。
示例:
int arr[] = {10, 20, 30};
int* const ptr = arr;
此时可以修改数组内容,如
*ptr = 15;
合法,但不能让
ptr
指向别的地址,例如
ptr++;
会报错。
指向const对象的const指针
既不能修改指向的数据,也不能改变指针本身。
示例:
const int arr[] = {1, 2, 3};
const int* const ptr = arr;
这种写法在函数参数中很常见,确保数组不被修改且指针不偏移。任何尝试修改
*ptr
或
ptr
的操作都会失败。
函数参数中的典型用法
在函数中传递数组时,合理使用
const
能提高安全性。
示例:
void printArray(const int* arr, int size) {
for (int i = 0; i < size; ++i)
std::cout << arr[i] << " ";
}
该函数接受一个只读数组指针,避免意外修改原始数据。调用时传入普通数组或
const
数组均可。
基本上就这些。关键在于分清
const
修饰的是指针本身还是它指向的数据。记住:
const
紧靠左边的类型或指针符号起作用,若左边无类型,则作用于右边。多练习几种组合,理解起来就不难了。