回顾C++,define与const之区别,const的使用方式详解

前言:咱先讲讲define

在C程序中,我们常用define,把符号常量化

比如: #define PI 3,1415;

这称之为宏定义,宏定义不是变量,没有类型,不占用存储单元,它有个特点:把源代码中所有的 PI(例变量名) 全部替换成 3.1415

注意:宏定义只是在源代码编译时进行替换,编译完成之后,程序中不再有宏名PI这个标识符

引出const

C++引入const修饰符是 为了定义常量

例如: const int PI = 3.1415; 这个常量PI是有类型的,它是通过编程者手动定义的一个变量,占用存储单元,有地址,可以用指针指向它,但是我们不能修改它的值,虽然它是个变量,但是我们通过const把它的值给固定了,无法进行修改了,所以它现在成了个“常量”

这就出现区别了

说说define和const的区别

define:

​ 宏定义不是变量,没有类型,不占用存储单元,它有个特点:把源代码中所有的 PI(例变量名) 全部替换成 3.1415

const:

​ 通过编程者手动定义的一个变量,占用存储单元,有地址,可以用指针指向它,但是我们不能修改它的值,虽然它是个变量,但是我们通过const把它的值给固定了,无法进行修改了,所以它现在成了个“常量”

const的优势

因为define把代码中所有的 相关变量名进行了替换,可能出现一种情况,盲目替换产生一定的麻烦

因此,通过const消除了这个不安全性

const与指针的用法

const与指针变量也能一起使用,组合情况分三种

指向常量的指针变量、常指针变量、指向常量的常指针变量

可以解释一下这三种吗?

  1. 指向常量的指针变量

    一个普通的指针变量,但是它指向了一个常量这个指针变量的值可以进行改变,即,这个指针可以指向其他的常变量,但是如果它指的是const类型的数据,那就不能改变了

    const char *name = "abc"
    
    name[2] = 'Z';       # 这种是错误的,不能改变常量
    
    name = "bcde";		#  这种是正确的,name指向了其他常量
    
  2. 常指针变量

    指把指针变量所指的值(地址)定义为不可改变的常量,而对该指针变量存放的地址值对应的存储空间里存储的数据可以修改

    char *const name = "abc";
    
    name[2] = 'Z';       # 这种是正确的,改变值
    
    name = "bcde";		
    #  这种是错误的,name不能指向其他常量
    

    name = “bcde” 意思是 分配一块储存空间,把"bcde"存入,再将这块存储空间的首地址赋值给name,但是const 的存在,要求name不能改变存储空间首地址。

  3. 指向常量的常指针

    指初始化之后,这个指针变量的值(地址)不能变,指向的存储空间的数据也不能变。

    const char* const name="abc";
    
    name[2] = 'Z';       # 这种是错误的,不能改变值
    
    name = "bcde";		
    #  这种是错误的,name不能指向其他常量
    

举例

定义圆周率π为const常量,求周长和面积
#include <iostream>
using namespace std;
const float PI = 3.1415;
int main() {
	float r;
	cin >> r;
	cout << 2 * PI * r << endl << PI * r * r;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值