C中常變數 const的應用
const int a=3
表示a被定義為一個整型變數,指定其值為3,而且在變數存在期間其值不能改變。
常變數與常量的異同是:常變數具有變數的基本屬性:有型別,站儲存單元,只是不允許改變其值。可以說,常變數是有名字的不變數。有名字便於在程式中被引用。
const:
int a=10;//a 可讀可寫
int b;
b=a;// a 的讀許可權
a=20;//a 的寫許可權,左值,放在賦值符號的左邊
(1)定義常變數,將變數變成只讀。
(2)資料型別對於const來說是透明的。
const int ca=10;
ca=10;//報錯
int const cb=10;
cb=10;//報錯
以上兩種情況是因為const把資料型別視為透明,因此將ca,cb變成只讀。
(3)const 與指標,const修飾它的直接右邊。
const 與指標的位置
【1】資料型別【2】*【3】變數名
int a=10;int b=20;
const int*p1=&a;
p1=&b;//可以,因為const修飾的是它的直接右邊,即*
*p1=200//不可以
int const *p2=&a;
p2=&b;//可以
*p2=&b;//不可以
int*const p3=&a;
p3=&b//不可以
*p3=&b;//可以
const int*const p4=&a;
*p4=&b;//不可以
p4=&b;//不可以
(4)許可權可以同等或者縮小傳遞,但不能擴大傳遞
inta=10;int b=20;
const int ca=10;
const int cb=20'
int *p=&a; p=&b;
p=&ca//錯誤,*p=100可以,因此p= &ca 的值會被間接修改,因此不行。
const int *p1=&a;
p1=&ca;//可以,因為*p=100不可以,因此p1=& ca 的值不會被改變因此可以。
int *const p3=&ca;//不可以
認識斷言
aessert :斷言,表達一定為真,為假時程式崩潰,有斷言時,會報告崩潰情況和位置。
if 於斷言往往同時出現。
兩者位置不能互換,assert在前,if在後。
例:#include <stdio.h>
#include <aessert.h>-------》reslease版本,程式碼正確不用時,自己消失掉。
int Div(inta,int b)
{
return a/b;
}
int main ( )
{
aessert(b!=0);
if(b==0)
{
return 0;
}
printf("%d\n",Div(10,20));
return 0;
}