const和assert的使用

目录

一.const

二.assert


一.const

作用:

用来修饰变量,把变量修饰为常属性。就是让一个变量不可修改。

如何使用:

没加const的:

#include 
int main()
{
	int a = 0;
	a = 2;
	printf("%d\n", &a);
}

会输出2 ,这就是一个挺简单的代码哈。

加了const后:

#include 
int main()
{
	const int a = 0;
	a = 2;//这里的a在编译器里面是编译不过去的,报错信息是:表达式必须是可修改的左值。
          //也就是说const把a修饰为一个不可修改的量。
	printf("%d\n", &a);
}

 const用在指针上是有一点小讲究的

用在指针的*的左边和右边修饰的是不一样的,请看下文。

这是原本的代码,输出结果是 i 的值,也就是 1。

#include
int main()
{
	int i = 1;
	int* a=&i;
	printf("%d\n", *a);
}

 const 修饰在*号左边:

#include
int main()
{
	int i = 1;
	const int* a = &i;
	*a = 2;//*a会变为不可修改的左值,与前面的的报错类似
	printf("%d\n", *a);
}
#include 
int main()
{
	int i = 1;
	int j = 2;
	const int* a = &i;
	a = &j;//但是修改a是没有任何问题的
	printf("%d\n", *a);
}

 所以const在*左边的时候修饰的是解引用的a也就是带*的a

而a本身还是可以正常使用的,并没有受const影响。

const在*右面的时候

#include 
int main()
{
	int i = 1;
	int j = 2;
    int* const a = &i;
	a = &j;//放在这里a就会变为不可修改的左值
	printf("%d\n", *a);
}
#include 
int main()
{
	int i = 1;
    int* const a = &i;
	*a = 2;但是这里的*a又可以正常使用了
	printf("%d\n", *a);
}

所以const在*右边的时候a是被修改的所以不能正常使用

但是*a是可以正常使用的。

最后呢

总得来说,const在*左边修饰的是解引用的,也就是带*的,而不带*的可以正常使用

                  const在*右边修饰的是没被解引用的,也就是不带*的,所以带*的可以正常使用

也就是呢const在*左边修饰的是带*的,

              const在*右边修饰的是不带*的。

二.assert

头文件:

#include

作用:用来发现bug并报出bug位置

如何使用:

assert();//在括号中写入表达式,表达式结果为假会报出bug位置。

例子: 

下面是一个写好的没问题的代码,

#include 
#include 
char* my_strcpy(char* a,const char* b)//这是一个模拟的strcpy函数
{
	assert(a && b);//这是assert的作用位置,可以看到a和b是两个指针相与表示a或b中有空指针表
                   //达式的结果为0
	char* c = a;
	while (*a++ = *b++)
	{
		;
	}
	return c;
}
int main()
{
	char a[] = { "############" };
	char b[] = { "abc" };
	my_strcpy(a, b);
	puts(a);
}

为了演示assert的作用和使用我们吧上面代码的b字符数组改成空指针。

#include 
#include 
char* my_strcpy(char* a,const char* b)
{
	assert(a && b);
	char* c = a;
	while (*a++ = *b++)
	{
		;
	}
	return c;
}
int main()
{
	char a[] = { "############" };
	char* b = NULL;
	my_strcpy(a, b);
	puts(a);
}

最后输出的结果是这样的:

其实就是错误所在的具体位置。 

const和assert的使用_第1张图片 assert()断言在release版本是会被优化掉的。

以上就是本次的分享,欢迎大家评论,指出错误或更好的方法。

你可能感兴趣的:(c语言)