各位少年,大家好,我是博主那一脸阳光
,今天分享assert法官的断言,指针宝箱的使用。
前言:如果你在计算机的世界中触犯了语法法规,那么编译器就要上线了,就会出现报错。然而想想我们在现实中设计到经济纠纷什么的,一些自身外部的物资这时候编译器警察就管不了了,没有权限,这时候就需要一些内部法官来管理了,今天我们介绍一个C语言中的法官assert,它是C语言中的库函数。
assert的法官的介绍和宣判
assert叫做“断言”什么是断言“呢?请看下面代码示例。
int a=10;
int b=20;
assert(a==b)//如果不为真,就报错
大家看到了吧,assert非常的霸道,通常assert在指针的时候常用到,接下来介绍一下函数原型和函数参数。
#include <assert.h>
void assert( int expression );
如果你想要使用这个函数的话,你就要使用它对应的头文件assert.h
,返回返回值是void
,函数的参数是整形的表达式,如果表达式结果为真
(执行
),如果为假
(程序终止
)。
assert通常用来测试代码测试运行和指针的运算往往比if
语句更加简洁方便。
如果最后我们测试成功以后,该怎么屏蔽assert
呢?很显然这里就需要一个宏
了,我们在头文件处加上#define
NDEBUG
这样就会禁用所有assert
语句了。一般我们在Debug
版本上的使用,但是Release
版本中选择禁用assert
版本中已经优化掉了(在VS
是这样的),这样在Debug
版本中大大节省的时间。
指针的使用和传址调用
函数调用分为两种(传址调用
)(——————————(传值调用
)
传值调用,大家可以理解为传递的值。
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
int ret = Add(a, b);
printf("%d\n", ret);
return 0;
}
当这段代码调用add函数的时候,add函数调用,传值调用,传入函数的时候,传入的是a和b的变量。
传址调用是什么呢?
传址调用:比方说有两个值,传址就是函数在调用的时候,传递的是这两个值的地址。传值调用是就是传入的两个值,就像一个展览的复品一样,一个副本。
通过传址调用模拟实现strlen函数
#include<stdio.h>
size_t my_strlen(const char *s)
{
int count = 0;
while (*s != '\0')
{
count++;
s++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%zd\n", len);
return 0;
}
size_t
原型是unsigned int
无符号整形,意思是说不能有负号,只能有正数。大家这里理解就可以了。
传址调用和传值调用。
那很显然大家就疑惑了?之前我博客有一篇不需要传址调用模拟实现strlen函数的例子,