C语言:const关键字、指针常量与常量指针

const关键字

  const定义的变量,但又相当于常量,说它定义的是常量,却有变量的属性,所以叫做常变量。其中,const int n = 5; 和 int const n = 5; 完全等价。
  用const定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以,所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值,否则会报错。
  使用const第一个可以让人易读懂,第二个编译器会针对去优化,第三个不让别的地方不小心改变它的内容(或许造成非常大的影响)。

#define与const的区别

 #define定义的是常量,是在预处理的时候操作的,只是简单的替换,不进行类型检查。由于系统只会给变量分配内存,所以系统不会给它分配内存,编译后就不存在了。
 const定义的是常变量,仍然是一个变量,具备变量的属性(类型,内存),常变量是有名字的不变量,而常量没有名字,既然有名字在程序中就便于引用。与#define相比,除了不能作为数组长度,常变量具备它的全部优点。

常量指针与指针常量

1、常量指针的值不能改变,但这不意味着指针本身不能改变,常量指针可以指向其他的地址。如:

int a = 9;
int b = 10;
const int *p = &a;	// p是一个指向int类型的const值,与int const *p等价
*p = 11; 			// 编译错误,指向的对象是只读的,不可以通过*p进行改变
p = &b;				// 合法,可以改变p的指向

2、指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的。如:

int a = 9;
int b = 10;
int* const p = &a;	// p是一个const指针
*p = 11; 			// 合法,可以改变*p的值
p = &b;				// 编译错误,p是一个const指针,只读,不可变

小结一下:区别两者可以查看const与*的顺序,或者说,指针和常量的关系就是看const修饰的是*p还是p;

3、不能通过这个指针改变变量的值,但是可以通过其他方式来改变变量的值。如:

int a = 5;
const int *n = &a;
a = 6;		// 合法

4、常量指针的使用必须往const去兼容,如:

const float g_earth = 9.80;
const float *pe = &g_earth;	// 合法

// 注意与第1种情况对比
const float g_moon = 1.63;
float *pm = &g_moon;		// 不合法, 如果使用*pm去修改值,g_moon也会变化,很荒谬吧?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-QWERT

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值