C和C++中的const

const是定义常量  →  const意味着只读

1:关于前前后后的const

  const int a / int const a      //代表一个常整形数,不能修改。 如const int a = 10; a = 11;×这是错误的。

  const int * b                 //b是一个指向常整形数的指针,即b所指向的内存数据不能修改,但是它本身可以修改。

  int * const c                //c是常指针。即指针变量本身不能被修改,但是它所指向的内存空间可以被修改。 

  const int * const d         //d是一个指向常整形的常指针。即指针和它所指向的内存空间均不能被修改。


# include "iostream"
using namespace std;
struct you
{
	char name[64];
	int age;
};
int you01(const you * pt)
{
	//pt->age = 10; //pt是指向常整形数的指针,无法对其指向的内存数据进行修改。
	pt = NULL;      //但是可以对pt本身进行修改。
	return 0;
}

int you02(you * const pt)
{
	//pt = NULL; //是常指针,本身不能被修改。
	pt->age = 10; //但是pt所指向的内存空间可以被修改。
	return 0;
}
int you03(const you * const pt)
{
	//pt = NULL; //pt是指向常整形的常指针,本身不能被修改。
	//pt->age=10; //pt所指向的内存空间也不能被修改。
	printf("age:%d\n", pt->age);
	return 0;
}
void main()
{
	you y1;
	y1.age = 18;
	you03(&y1);
}

2:C和C++中的const

C语言中

# include "stdio.h"
void main()
{
	const int you = 18;
	int * p = NULL;
	p = (int *)& you;
	* p = 20;
	printf("you:%d\n", you);
	printf("* p:%d\n",*p);
}
结果

C++中

# include "iostream"
using namespace std;
void main()
{
	const int you = 18;
	int * p = NULL;
	p = (int *)& you;
	* p = 20;
	printf("you:%d\n", you);
	printf("* p:%d\n",*p);
}
结果


可见,C语言中的const是一个“冒牌货”(间接赋值就可以改变),C++中的const才是真正的常量→C++中的const符号表实现机制



3:const 和#define

相同:C++中的const常量类似于宏定义

const int you = 18      ≈       # define you 18

# define me 20
void main()
{
	const int you = 18
	//const int me = 20;//将这个替换# define me 20也可以
	int array[you + me];
}

不同:const常量是由编译器处理的,提供类型检查和作用域检查。

           #define 宏定义由预处理器处理,单纯的文本替换。

#include "iostream"
using namespace std;
void fun1()
{
# define a 10
	const int b = 20;
}
void fun2()
{
	printf("a=%d\n", a); // fun1()中#define定义的a在fun2()中可以使用。
//printf("b=%d\n",b);const提供作用域检查,fun1()中定义的b在fun2()中不能使用。
}
void main()
{
	fun1();
	fun2();
	
}

结果


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值