assert 断言,const语句

一:const修饰指针

                               (   const的作用:给指定变量加上限制,使其不能被修改)

例如:

#include<stdio.h>
int main()
{

int m=7;
const int n=7;
m=20;
n=20;
printf("m=%d\n",m);
printf("n=%d\n",n);
return 0;

}

运行的结果是:

 

 可以看到,上述代码中的n是无法被改变的,但是n的本质是变量,只不过被const 修饰后,在语法上有了限制,直接在代码中对n修改就不符合语法规则,就报错

但是如果我们另辟蹊径,不直接对n的值进行修改,而是从它的地址入手呢

#include<stdio.h>
int main()
{

const int n=6;
printf("n=%d\n",n);
int *p=&n;
*p=0;
printf("n=%d\n",n);
return 0;

}

结果说明了一切,我们做到了,但这只是一条小路,它打破了语法规则

我们还应该在思考一下为什么呢,我用const 去修饰n就是为了他不会被改变,但是这样还是会有办法改变n,那么怎样可以让他无论如何都不会被改变呢?

那我们联想到,前面开辟的小路就是从我变量的指针入手,那我要是直接const指针呢

请看:

#include<stdio.h>
int main()
{
int n=7;
int *p=&n;
*p=20;
printf("n=%d\n",n);

return 0;

}

const 放在*p的左边

#include<stdio.h>
int main()
{
int n=7;
int const*p=&n;  //const 放在*p的左边
*p=20;
printf("n=%d\n",n);
return 0:

}

const放在*p的右边

#include<stdio.h>
int main()
{

int n=7;
int *const p=20;
printf("n=%d \n",n);
return 0;


}

j​​​

综上,可得出结论:

const 如果放在* 的左边,修饰的是指针指向的内容,保证指针指向的内容不会通过指针来改变,但是指针变量本身的内容可以改变。

const 如果放在* 的右边,修饰的是指针变量本身,保证指针变量的内容不会改变,但是指针指向的内容,可以通过指针来改变。

二:assert 断言

其头文件为   assert.h  用于在运行中确定程序是否符合指定条件,如果不符合就报错终止运行,这个宏常常被称为“断言”。



assret(p !=NULL)

验证p是否为空指针,如果是的话,程序就会终止运行,并且给出报错信息提示,如果不是,程序就会继续进行。

assert( 要判断的条件)

它的使用有以下好处:

1: 可以自动识别标识文件和出问题的行数号

2:有一种可以无需更改代码就能开启或关闭的assert的机制,那就是

#define NUEBUG

#include<assert.h>

在前面定义一个宏#NUEDUG即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值