【C语言初学】使用assert、const提高代码质量

大家好,我们Brant_zero,很久没更新了。

今天给大家带来一篇C语言初级提高代码质量的文章,大家看完觉得不错可以点个赞,求求。

目录

了解并使用assert、const

1.正确使用assert

2.const的作用:

1. const int *p=&a; 的意义:

2.int *const p=&a;的意义:


了解并使用assert、const

1.正确使用assert

assert是什么呢,这里肯定有一些人产生了疑问,这里我们拿出MSDN中的介绍来看看

这里发现,assert是用来判断结果是否为假的,是假的就将错误信息打印出来。

这就很方便我们在写代码的时候判断一些语句的真假了,避免一些我们不希望产生的结果,并且告知我们错误。那这里我们来举一个strcpy函数的例子:

我们都知道strcpy是拷贝一个字符串到另外一个字符串,而如果字符串的起始位置是一个无效的地址,比如NULL地址,这是我们不想看到的情况,这里我们就可以使用assert断言一下,让两个字符串的起始地址都不能是NULL指针。

#include<assert.h>
int main ()
{
  char arr1[10]="abcd";
  char *p=arr1;
  char *p1=NULL;
  assert(p);
  assert(p1);
  return 0;
}

这样就可以避免p和p1如果是NULL指针的情况,当然上例的p也不可能是NULL指针,而是空指针的p1就会被assert判断为假,起到保险的作用,并且报告出错误的行数等等。

  这里再拿出一个例子,如果const断言的是false会出现什么情况:

提醒的非常到位,还告诉了我们错误的行数,当然大家不要忘记引assert的头文件:

#include <assert.h>

2.const的作用:

如果变量或指针被const修饰,这个变量或指针便不能修改。

比如const修饰变量:const int a=20;

那么如果后面你要将a的值改动,这编译器便会开始报错.const修饰的变量不能被修改。

这里重点讲解一下const修饰指针:

const int *p=&a;

int *const p=&a;

const int *const p=&a;

这虽然只是挪动了const的位置,但是表示的意义却是非常不同的。

1. const int *p=&a; 的意义:

即p=&b;(可以) *p=30;(错误)

这里的const放在*的左边,修饰的是指针指向的目标。这里大家可以记忆为,const定死了*p,但是没有定死p。

 但是我们可以改变p的指向,这样*p的值也就不同了。

只是不能直接通过*p=20这种方式来改变p指向内容的值。

你看,编译器直接报错了。

2.int *const p=&a;的意义:

即*p=30;(可以) p=&b;(错误)

这里const便修饰的是指针本身。

可以巧记为:const定死了指针p,但是*p没有被const定死。

 44行语句便报了错,但是46行的没有。

 这样的方式便可以改变*p的值,但是不能改变p的指向。

3.而第三种就简单了,两种都不能改,被const修饰死了,就是啥方式都不能改;

assert、const在函数中的使用

这里我们举例strcpy函数。

我们知道,strcpy函数是有一个目标地址和一个起源地址。

我们要改变的目标地址指向目标的值,而我们不希望起源地址指向目标的值被修改,这样我们便可以用const来修饰*p,防止BUG的产生,即使产生,也会报错,便于我们发现。

而assert函数可以帮我们避免两个指针是空指针,这样就可以避免用户不小心传进来空指针,导致程序错误。

这里放上我写的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brant_zero2022

素材免费分享不求打赏,只求关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值