目录
4.const修饰指针
4.1const修饰变量
在编程中,为了防止代码在运行过程中变量的内容意外改变,可以使用const函数,对变量进行限制,使变量处于不可直接被修改的状态。
比如:
被const修饰后的b,是无法通过b进行直接修改的,但是如果我们换种方法呢?
可以发现,即使通过 b 无法直接实现内容的更改,但如果我们将b的地址取出来,通过地址更改b的内容,还是可以做到的
那如果我们也不想通过地址更改b的内容呢?比如:
在这里,我们通过const 限制 *pb,就无法通过*pb 更改 pb所指向地址的内容
这里限制的是*pb,但是pb是不受任何影响的,比如:
我们仍旧可以使用pb,令 pb = a 的地址,最后解引用pb所指向的地址,输出a的值
注意:这里只是无法通过*pb 更改 pb所指向地址的内容,并不是说明*pb无法使用,比如:
如果我们只想限制 pb ,那就如左图 如果我们 pb 与 *pb 都想限制,那就如右图
结论:const修饰指针变量的时候
(1)const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本身的内容可变
(2)const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针所指向的内容,可以通过指针改变
5.指针运算
指针的基本运算有三种,分别是:
指针+-整数
指针-指针
指针的关系运算
5.1指针+-整数
备注:数组名代表首元素地址
指针+-整数会跳过 整数*sizeof(类型)个字节,上一张章作品有详细讲解
5.2指针-指针
指针-指针会返回一个整数,返回的这个整数的绝对值是两个地址之间的元素个数
比如:
5.3指针的关系运算
指针之间也是有大小的,因此也可以通过指针来实现循环
6.assert断言
在C语言中有一种函数,用于在运行时确保程序符合指定条件,如果不符合,就报错终止运动,它也常常被称为“断言”
这个函数就是assert函数
assert( )接受一个表达式作为参数。如果该表达式为真(返回值非零),assert( )不会产生任何作用,程序继续运行。
如果该表达式为假(返回值为零),assert( )就会报错,在标准错误流 stderr 中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。
在使用assert函数时,我们要包含一个头文件 <assert.h>
使用如下:
由此可见assert的作用
当我们写了几百行代码时,assert就可以起到很大的作用,同时assert对于程序员是非常友好的,当我们利用assert确定程序完全没有问题之后,我们就可以在头文件之前定义一个NDEBUG,
这样所有的assert就会被注释掉,提高代码运行效率
当我们出错误时,把NDEBUG去掉,就可以再次使用assert了
由此可见,利用完NDEBUG后,a不等于10代码也可以正常进行