C++ 常量指针、指向常量的指针和指向常量的常量指针之间的区别
在C语言中,指针是一种非常重要的概念。指针可以指向一个变量,然后我们可以通过指针来修改变量的值。然而,在实际开发中,有时我们希望限制指针的某些行为,比如不允许通过指针来修改变量的值。这时,常量指针、指向常量的指针、指向常量的常量指针就派上用场了。下面让我们来详细了解一下它们之间的区别。
常量指针
常量指针是指针本身是一个常量,指向的变量是可以修改的。这个概念可能有些抽象,下面通过一个示例来说明:
int num1 = 10;
int num2 = 20;
const int *p = &num1; // p是一个常量指针,指向一个int类型变量,该变量可以修改
p = &num2; // 合法操作,p可以指向num2
*num1 = 30; // 非法操作,*p指向的变量是const int类型,不允许修改它的值
在上面的代码中,我们定义了两个int类型的变量num1和num2,然后定义了一个常量指针p,指向num1。可以看到,p不允许修改它指向的变量的值,但是它本身是可以指向其他变量的。
指向常量的指针
指向常量的指针是指针所指向的变量是一个常量,不允许通过指针来修改变量的值。示例如下:
const int num = 10;
const int *p = # // p是一个指向常量的指针
*p = 20; // 非法操作,*p指向的变量是const int类型,不允许修改它的值
在上面的示例中,我们定义了一个常量num,然后定义了一个指向常量的指针p,它指向num。可以看到,尝试通过p来修改num的值将导致编译错误。
指向常量的常量指针
指向常量的常量指针是指针本身是常量,并且指针所指向的变量也是一个常量。示例如下:
const int num = 10;
const int *const p = # // p是一个指向常量的常量指针
p = &num2; // 非法操作,p是一个常量指针,不允许修改它的值
*p = 20; // 非法操作,*p指向的变量是const int类型,不允许修改它的值
在上面的示例中,我们定义了一个常量num,然后定义了一个指向常量的常量指针p,它指向num。可以看到,在指向常量的常量指针中,既不能修改指针本身的值,也不能修改指针所指向的变量。
结论
在C语言中,常量指针、指向常量的指针、指向常量的常量指针是指针的一种重要应用。常量指针是指针本身是一个常量,指向的变量是可以修改的;指向常量的指针是指针所指向的变量是一个常量,不允许通过指针来修改变量的值;指向常量的常量指针是指针本身是常量,并且指针所指向的变量也是一个常量,既不能修改指针本身的值,也不能修改指针所指向的变量。在实际开发中,根据不同的需要,可以选择使用不同类型的指针。