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;
}