0
点赞
收藏
分享

微信扫一扫

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console

_刘彦辉 2023-05-05 阅读 57

指针和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 变量很荒谬。

三级目录

举报

相关推荐

0 条评论