C++中指针关于const、类、一维字符数组和普通二维数组的应用

本文详细介绍了C++中const在指针中的应用,包括常量指针、指针常量、指向常量的指针常量的特性及使用规则。此外,还探讨了类中指针成员变量的处理,字符指针与一维字符数组的区别,以及读入字符串的不同方法,如cin、cin.get()和getline()。最后,简要讨论了字符指针与二维数组的关系。
摘要由CSDN通过智能技术生成

一、const在指针中的应用(以int作为数据类型代表)
1、常量指针(const int* p):指针的指向可以更改,但指针指向的值不可以直接更改。
说白了最大的特点就是对 *p是不能进行赋值操作的,但要注意随着指针指向的改变,或者指向的变量本身的值的改变,*p也是会改变的。

int a=10int b=20const int*p;//不必初始化
p=&a;
cout<<"*p="<<*p<<endl;//输出结果*p=10
//*p=20为非法语句
p=&b;//或者a=b
cout<<"*p="<<*p<<endl;//输出结果*p=20

2、指针常量(int* const p):指针的指向不可以更改,但指针的内容可以更改。
说白了就是初始化后不能再让指针指向别的地址,但依旧可以通过改变指向的变量的值,或者直接对 *p赋值来改变该地址的内容。
指针常量在定义时就应该被初始化,且初始化的地址必须是一个变量的地址,如果用常量的地址则会被报错。可能是因为能够通过 *p来重新赋值,这可能会与常量属性产生矛盾。

int a=10;
const int b=20;
int* const p=&a;
*p=b;//a=b;将*p的值改为20
cout<<"a="<<a<<endl;//输出结果a=20

3、指向常量的指针常量(const int* const p):不能更改指针的方向,不能通过*p更改指针指向的值。
该类型指针在定义时也必须初始化,用来初始化的地址可以是常量地址,也可以是变量地址。当初始化使用的是常量地址时,指针指向的地址和该地址内的值都不可以再更改(这与上一个指针不能使用常量地址初始化似乎相关);当初始化使用的是一个变量地址时,就只能通过对变量赋值来改变地址中的值。

const int a=10;
const int* const p1=&a;//这样大家就都动不了了
int b=10;
const int* const p2=&b;
b=20;//通过对变量赋值来改变地址中存放的值
cout<<"*p="<<*p<<endl;//*p=20

4、const 表示“只读”的含义的应用
在使用传引用(即地址传递,pass by reference)时,如果在形参前加上const就不会对实参产生影响,同时又避免了重新分配内存空间,但相应的函数中就不能出现对形参赋值的语句。

void plusone(int a){
   
	a+=1;
	cout<<&a<<endl;
}
int main(){
   
	int a=0;
	plusone(a);
	cout<<"a="<<a<<endl;//输出结果a=0
	cout<<&a<<endl;//输出的两个地址不相同
}
/*--------------------------------------*/
void plusone(int&a){
   
	a+=1;
	cout<<&a<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值