C++:C++PrimerPlus :7.3.5:指针和 const


我们来探讨下:将const 用于指针的一些微妙地方。

  • 让指针指向一个常量对象, 这样可以防止使用该指针修改所指向的值,常量指针。
  • 指针本身为常量,这样可以防止指针改变指向的位置,指针常量。

我们主要从下面几个方面做总结:
💚💚💚

  • 常规地址赋给常规指针
  • 常规地址赋给 const指针
  • const地址赋给 常规指针(禁止这样做)
  • const 地址赋给 const指针

1.常规地址赋给常规指针

#include<iostream>
int main()
{
	int age = 10;
	int* ptr = &age;
	std::cout << "age address: "<< &age;
	std::cout << "ptr address: "<< &ptr;
	std::cout << "ptr points address: "<< ptr;
	std::cout << "ptr points value: "<< *ptr;
}
// 打印结果
age address: 0x61fe1c
ptr address: 0x61fe10
ptr points address: 0x61fe1c
ptr points value: 10

常规地址赋给 常规指针,这个是最基本的,比较简单,这里就不多介绍。

1. 指向常量的指针 pt (常规地址赋给const指针)

#include<iostream>
int age = 20;
// 声明一个常量指针:因此不能使用 pt来修改这个值,换句话说:*ptr的值是常量,不能被修改。
const int* ptr = &age;
*ptr +=1;  // Invalid because ptr points to a const int
age = 30; // valide because age is not a const

💚💚💚

  • 虽然是 *ptr是一个常量,但是并不意味着指针指向的值就是常量,只是意味着,对于 ptr而言,这个值是常量。
  • 但是由于age不是 const ,可以直接通过 age变量来修改 age值。

2. const地址赋给 const指针

#include<iostream>
int main()
{
	const int age = 10;
	const int* ptr = &age;
	
}

💚💚💚
针对这种情况:const地址赋给const指针,这样既不能通过 *ptr 来修改,也不能通过 age来修改。

#include<iostream>
int main()
{
	const int age = 10;
	int* ptr = &age;  // Invalid , const 地址禁止赋给 非 const 指针
	
}

C++ 还有一个规定:
禁止将const地址赋给非 const指针,如果读者非要这样做,就只能通过类型强转转换
这个禁止是基于这个考虑:如果将const的地址赋给非 const指针,那么就会通过 指针来修改变量值,这样就会使得 const 变量很荒谬。

三级目录

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值