小菜学C之const理解

本文介绍了C语言中const关键字的用法,包括const修饰的只读变量在编译期和运行期的区别,以及const如何修饰指针。通过实例解析了const修饰不同情况下的指针行为,帮助读者理解const的含义和作用。
摘要由CSDN通过智能技术生成

           作为一个业余程序爱好者,第一次写关于C方面的博客,不知道写啥         上班闲暇之际看了一下2012微软实习的一道题目,顺便拿出来分析分析,学习学习C。

A,11    B,12   C,垃圾值    D,编译不通过

首先来看下 int const* p    这个代表指向常量的指针(指针所指向的值不变,指针可变)  即*p不能被赋值 p可以p++    所以排除D选项

从上图可以知道,给*p赋值的时候编译出现错误:第8行,这种类型为只读    即*p不能被赋值。

 

p是变量i的地址,p+1就是变量i的下一个地址(假如i的地址是0004,即p+1的地址是0008,32位int占4字节)

而这个地址的值是不确定的垃圾值    所以选C

 

在深度解剖书上写的很清楚,再次回忆一下

const是constant的缩写,即恒定不变的意思。即readonly!   修饰的是只读变量。

编译器通常不为普通const只读变量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率很高。

const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define 一样给出的立即数,所以const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个备份。#define宏是编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。

 

再来看看修饰指针

1  const int *p;  //p可变,p指向的对象不可变

2  int const *p; //p可变,p指向的对象不可变

3  int *const p; //p不可变,p指向的对象可变

4  const int * const p; //指针p和p指向的对象都不可变

 

记住这个可以用“省略类型名,const就近原则”

1  可以变成 const *p    //const修饰*p,所以*p不能赋值,只读属性   p是指针,可以改变

2  可以变成const  *p    //和1一样

3  可以变成*const p     //const修饰p,p不可变      *p可以改变

4  可以变成const * const p; //p  和 *p 都不能改变

 

(以上纯属个人理解,如有错误请自行鉴定,参考深度解剖,如需转载请说明出处!)            

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值