PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
言前
C言语是我接触的第一门序程设计言语,时当还很傻很无邪,后来敏捷被各种高级言语洗脑,但是不得不说,C的位置真的无可撼动。
const修饰符在C言语中很用常,但是近最读代码的时候常常搞不清楚,索搜了一番,做个结总。
体整认知
const int i; i = 8;
编译器会报:error: assignment of read-only variable ‘i’。
const int i = 8;
const修饰符的典范作用
- 最基本的,护保被修饰的作用,避免之外改修
- 编译器常通不为const常量配分存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的作操,效率很高
- 使序程中的错误在编译的时候就被报出(因为2)。
const修饰符的修饰对象探秘
修饰通普量变
const int i = 8; int const i = 8;
面下两者是等价的,都是声了明一个值为5的常量。
修饰指针
const int *p; int const *p;
面下两个是等价的,都声了明一个const int类型的指针,也就是说,序程里头不能转变*p的值,但是可以转变p的值(即可以转变指针的指向)。
int * const p = &n;
这个是声了明一个const的指针,const是修饰指针的。也即p的值不允许转变(指针就定一得指向n那块内存,不能转变p的指向),但是*p的值可以转变。
小巧技
- const在*的侧左,const修饰指针所指的量变
- const在*的侧右,const修饰指针本身
带const修饰的数函参形
微笑着,去唱生活的歌谣,不要埋怨生活给予了太多的磨难,不必抱怨生命中有太多的曲折。大海如果失去了巨浪的翻滚,就会失去雄浑;沙漠如果失去了飞沙的狂舞,就会失去壮观。人生如果仅去求得两点一线的一帆风顺,生命也就失去了存在的意义。
#include <stdio.h> void add(const int a) { a = a + 1; } int main() { int temp = 34; add(temp); printf("%d",temp); return 0; }
void foo(const int * p) { *p += 1; }
编译时就会报错,因为我们试图改修一个常量的值。
void foo(const int * p) { int *r = p; *r += 1; }
虽然编译器编译时会告知你:warning: initialization discards qualifiers from pointer target type,说你赋值丢了一个性属修饰符,但是运行时还是可以转变p所指向内存的值。
void foo(int *const p1) { int a = 1; p1 = &a; }
文章结束给大家分享下程序员的一些笑话语录:
Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn