const怎么理解?
const修飾的變量不能夠在作為左值!!初始化完成后,值不能被修改!!
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供孟連網(wǎng)站建設(shè)、孟連做網(wǎng)站、孟連網(wǎng)站設(shè)計(jì)、孟連網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、孟連企業(yè)網(wǎng)站模板建站服務(wù),10余年孟連做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
C 和C++中const 的區(qū)別?
在C程序中
test.c
const int a; 只定義,不做初始化(C中允許),如果不做初始化,那么后面就不能再賦值了.
在C語言中const修飾的量,可以不用初始化,這個(gè)不叫常量,叫做常變量,本質(zhì)還是變量,只是
不能作為左值被修改值了
例如1: 在.c的程序中
const int a=100;
int array[a]={}; 是不可以的, 因?yàn)閍不是常量,他還是個(gè)變量
例如2: 在.c的程序中
const int a=100;
int *p=(int *)&a;
*p=300;
printf("%d %d %d \n",a ,*p,*(&a));//結(jié)果都為300
在C++程序中
test02.cpp
const int b; 編譯報(bào)錯(cuò),在C++中const修改的就叫常量,定義的時(shí)候必須被初始化,由于是常量了
所以可以用來定義數(shù)組的長度,如下代碼
例如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));//打印結(jié)果是 100,300,100
所以上面 print("%d %d %d",b,*p,*(&b));
b 被替換成100, *(&b)會(huì)被編譯器優(yōu)化掉 也是100
同時(shí)b在內(nèi)存中的值被修改了,改成了300
注意
在C++中const 修飾同時(shí)被初始化的值是一個(gè)立即數(shù),那么他就是個(gè)常量,如下
const int a = 100;
int *p = (int *)(&a);
*p=300;
print("%d %d %d",a,*p,*(&a));//打印結(jié)果是 100,300,100
但是如果用一個(gè)變量來初始化const修飾的量,就不再是常量了,會(huì)退化成常變量,本質(zhì)上變成變量了 如下
int b=1;
const int a=b;
int arr[a]={};//這一行編譯報(bào)錯(cuò),因?yàn)閍已經(jīng)不再是常量了
int *p = (int *)(&a);
*p=300;
print("%d %d %d",a,*p,*(&a));//打印結(jié)果是 300,300,300,由于a已經(jīng)不是常量了被退化成變量,這里就不再會(huì)被編譯替換了,打印的都是內(nèi)存中的值