const基本用法

来源:互联网 发布:看美剧用什么软件 编辑:程序博客网 时间:2024/06/16 00:35

你对const熟悉吗?

先看个例子:

int wages = 3000;

void func1(void)

{

printf("This month wages is = %d/n", wages);

}

void func2(void)

{

wages = 30000;

printf("This month wages is = %d/n", wages);

}

int main(void)

{

func1();

func2();

...

}

func1()是由程序员A编写的,func2()是由程序员B编写的,当他们的各自的模块集合在一起的时候,wages的值就变了,因为程序员B不小心在自己编写的模块中改变了wages的值,老板若是知道了,肯定会炒了你。(程序员A可能会跟B说,和你合作真是太愉快了,又加薪了)

经常编程的人,肯定会知道有一点,在程序中应该尽量避免使用全局变量,因为全局变量的值有可能会在你不知道的情况下被改变。但是,有些情况下,你又不得不使用全局变量,那你该怎么办?

那就是在你的全局变量前,加个const修饰符,即

const int wages = 3000;

这样,若其他人若想改变这个值,编译器就会报错,编译器会告诉你wages是只读的,不能被赋值。

const还能用在哪里?

常跟字符串函数的人,应该见过不少以下函数吧,

char *strcpy(char *strDes, const char *strSrc)

int strcmp(const char *s, const char *t)

int strlen(const char *str)

char *strcat(char *strDes, const char *strSrc)
    为什么这些函数都要加个const修饰符,不加行不行?(就好比我给你一个指向这些字符串的指针,但是你不能修改它)动手试试吧,看看效果,实践是检验真理的唯一标准。

如果你觉得自己懂了const怎么用的话,那么请继续

char *a = "45";

const char *b = "67";

b = a;

a = b;

大家觉得执行时会出错,还是会出错,动动手

结果大家都知道了把,都没错,只是执行时,会有警告,会提示你类型不相容。

[Warning] assignment discards qualifiers from pointer target type

ANSI C标准有说一句:

要使上述赋值形式合法,必须满足下列条件之一:

两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。

现在应该知道为什么了吧