1、常量指针
语法:const 数据类型 *变量名
不能通过解引用的方法修改内存地址中的值(用原始变量名可以修改)
注意:
指向的变量(对象)可以改变(之前是指向变量a的,后来可以改为指向变量b)
一般用于修饰函数的形参,表示不希望在函数里修改内存中的值
如果用于形参,虽然指向的对象可以改变,但这么做没有任何意义
如果形参不需要改变,建议就加上const修饰,程序可读性更好
#include <iostream>
using namespace sttd;
int main()
{
//常量指针的语法:const 数据类型 *变量名
//通常通过解引用的方法修改内存地址的值(用原始变量名是可以修改的)
int a=3;int b=8;
const int*p=&a;
//如果*p=8;报错,常量指针不可修改
//如果a=6;不会报错输出a=6,*p=6;即用原始变量名可以修改
cout<<"a="<<a<<" ,*p="<<*p<<endl;//正常输出a=3,*p=3
p=&b;//改引用b的值
cout<<"b="<<b<<",*p"<<*p<<endl;//输出b=8,*p=8
}
2、指针常量
语法:数据类型 *const 变量名
指向的变量(对象)不可以变。
注意:
在定义的时候必须初始化,否则会报错
可以通过解引用的方法修改内存地址中的值
C++编译器把指针常量做了特殊处理,改头换面后,有个新名字叫引用。
#include <iostream>
using namespace sttd;
int main()
{
int a=3,b=4;
int *const p=&a;//如果只声明不赋值会报错
*p=13;//进行解引用
cout<<"a="<<a<<",*p"<<*P<<endl;//输出13
//如果改变指向对象p=&b;报错
}
3、常指针常量
语法: const 数据类型* const 变量名
指向的变量(对象)不可改变,不能通过解引用的方法修改内存地址中的值。
注意:也会有个新名字叫,常引用。
总结
常量指针:指针指向可以改变,指针指向的值不可以改变。
指针常量:指针指向不可以改变,指针指向的值可以改变。
常指针常量:指针指向不可以改变,指针指向的值也不可以改变。