<四>1:全面掌握Const的用法

乎语百科 124 0

const怎么理解? const修饰的变量不能够在作为左值!!初始化完成后,值不能被修改!!

C 和C++中const 的区别?

在C程序中 test.c

const int a; 只定义,不做初始化(C中允许),如果不做初始化,那么后面就不能再赋值了. 在C语言中const修饰的量,可以不用初始化,这个不叫常量,叫做常变量,本质还是变量,只是 不能作为左值被修改值了

例如1: 在.c的程序中 const int a=100; int array[a]={}; 是不可以的, 因为a不是常量,他还是个变量

例如2: 在.c的程序中 const int a=100; int *p=(int )&a; p=300; printf("%d %d %d \n",a,p,(&a));//结果都为300 a只是在语法上保证了不能作为左值被修改,但是他内存中的值是可以被修改的,例如通过指针.

在C++程序中 test02.cpp const int b; 编译报错,在C++中const修改的就叫常量,定义的时候必须被初始化,由于是常量了 所以可以用来定义数组的长度,如下代码 例如3: C++代码 const int b=100; int array[b]={};

例如4: C++代码 const int b=100; int *p =(int )(&b); p = 300; print("%d %d %d",b,p,(&b));//打印结果是 100,300,100 这个结果为什么会和在C语言环境下的结果不一样? 是因为C和C++编译器对待const的编译处理方式不一样,在C语言中,const修饰的仍然被当做变量来编译生成指令的 C++中.出现的被const修饰的常量名,在编译的过程中都会被常量的初始化给替换掉的

所以上面 print("%d %d %d",b,p,(&b)); b 被替换成100, *(&b)会被编译器优化掉 也是100 同时b在内存中的值被修改了,改成了300

注意 在C++中const 修饰同时被初始化的值是一个立即数,那么他就是个常量,如下 const int a = 100; int *p = (int )(&a); p=300; print("%d %d %d",a,p,(&a));//打印结果是 100,300,100 编译过程中 a都会被替换成被初始化的立即数100

但是如果用一个变量来初始化const修饰的量,就不再是常量了,会退化成常变量,本质上变成变量了 如下 int b=1; const int a=b; int arr[a]={};//这一行编译报错,因为a已经不再是常量了 int *p = (int )(&a); p=300; print("%d %d %d",a,p,(&a));//打印结果是 300,300,300,由于a已经不是常量了被退化成变量,这里就不再会被编译替换了,打印的都是内存中的值

标签:

留言评论

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~