c和c++的区别之const

1.const

C++:

在c++中,const定义的是常量,该常量的值是不可以被修改的,编译时期
该使用该常量的地方直接替换成该常量的值,当然,常量是必须初始化的。
因为编译时期,使用该常量的地方必须替换成该常量的值,若没有初始化,
则此常量就是无用的常量

const修饰的数据产生的符号是local的,因为在编译时期就会替换常量的值,
此过程只在本文件中进行,外文件是无法解析此文件的常量



C语言:

在c语言中const定义的是常变量

下面用代码演示一下C和C++在const的区别:

#include<stdio.h>

int main1()
{
	const int a = 10;

	int *p = &a;
	*p = 20;
	
	printf("*p = %d   a = %d\n", *p, a);  //20  20

	return 0;
}

这是在c语言里面定义的常变量,其结果 *p = 20,a = 20;

#include<iostream>
using namespace std;

int main()
{
	const int a = 10;
	int *p = (int *)&a;
	*p = 20;
	cout << *p << "    " << a << endl;  //20         10
        
        return 0;
}

这是在C++里面定义的常量,其结果*p = 20;a = 10;在编译时期用到a常量的时候直接替换成10,所以不管如何改变*p的值都不会影响a的值

在编译时期不能确定常量值的时候c++中的常量就会退化成常变量

int c = 20;
const int d = c;//退化成常变量
int *p2 = (int *)&d;
    *p2 = 30;
    cout << *p2 << "    " << d <<"  "<<c <<endl;  //30 30  20
因为c是变量,所以d的值是无法确定的,所以d退化成了常变量

void fun(const int a) //退化成常变量
{
	int *p = (int *)&a;
	*p = 30;
	cout << *p << "  " << a << endl;  // 30 30
}

const作为形参也会退化成常变量

int main()
{
        fun(10); 
        return 0;
}

const的基本用法:

const修饰的是离它最近的完整类型
const修饰的内容是它修饰类型的内容
const修饰的内容不容许修改
不允许泄漏常量的地址给非常量的指针
int main()
{
        
	int b = 10;
	int *p1 = &b;
	const int *p2 = &b;
	int *const p3 = &b;

	int *q1 = &b;
	const int *q2 = &b;
	int *const q3 = &b;

	
	q1 = p1;    int * -> int *            //ok          
	q1 = p2;    const int * -> int *      //error  泄漏常量的地址给非常量
	q1 = p3;    int * const -> int *      //ok

	
	q2 = p1;    int * -> const int *            //ok
	q2 = p2;    const int * -> const int *      //ok
	q2 = p3;    int * const -> const int *      //ok

        q3 = p1;      //error,
        q3 = p2;      //error
        q3 = p3;      //error, p3被const直接修饰,则它的值不允许被修改

	return 0;
}

这些基本上就是c和c++关于const区别的用法,望与君共勉……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值