尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

C语言第八课:指针(二)

C语言第八课:指针(二) 1.const 修饰指针1.1const修饰变量tip:在C语言中这里的a是常变量但是如果在C中这里的a就是常量在变量前加上const 本意是a的值不能被修改但是仍然可以通过指针去修改a的值如下图1.2 const 修饰指针变量const 可以放在*左边也可以放在*右边俩边的作用是不一样的。左边限制的是指针变量指向的内容不能通过指针变量p来改变*p的内容但是p的内容是能改变的p可以指向其他变量。右边限制的是指针变量p*p可以改变但是p的内容不能改变不能指向其他变量如果在*的两边都放上const那么p和p指向的内容就都不能修改了2.野指针概念野指针就是指针指向的位置是不可知的随机的、不正确的、没有明确限制的2.1野指针的成因2.1.1 指针未初始化2.1.2 指针越界访问2.1.3 指针指向的空间释放p一旦拿到这个地址的时候就是野指针了因为p中存放的这个地址指向的内存空间已经返还给操作系统了2.2 如何去规避野指针2.2.1 指针初始化如果知道指针应该指向哪里就直接给指针一个值如果还不知道指针变量应该指向哪里的时候那么初始化为NULLtipNULL是C语言中定义的一个标识符常量值是00也是地址读写该地址时会报错。2.2.2 小心指针越界2.2.3 指针变量不再使用时及时置NULL指针使用之前检查有效性2.2.4 避免返回局部变量的地址3. assert 断言assert.h 头文件定义了宏 assert(),用于在运行时确保程序符合指定条件如果不符合就报错终止运行。这个宏常常被称为“断言”exassert(p!NULL);上行代码用于验证变量p是否等于NULL ,如果确实不等于NULL 程序继续运行否则终止运行并且给出报错信息提示。assert() 宏接受⼀个表达式作为参数。如果该表达式为真返回值非零assert() 不会产生任何作用程序继续运行。如果该表达式为假返回值为零assert() 就会报错在标准错误流 stderr 中写入⼀条错误信息显示没有通过的表达式以及包含这个表达式的文件名和行号。assert() 的使用对程序员是非常友好的使用 assert() 有几个好处它不仅能自动标识文件和出问题的行号还有⼀种无需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问题不需要再做断言就在 #include assert.h 语句的前面定义⼀个宏 NDEBUG 。定义宏NDEBUG所有 assert 全部失效变成空语句不会做任何判断。4.指针的使用和传址调用4.1库函数strlen的功能是求字符串长度统计的是字符串中 \0 之前的字符的个数。4.2传值调用和传址调用4.2.1传值调用实参传递给形参的时候形参是实参的一份临时拷贝形参有自己独立的空间对形参的修改不会影响到实参。4.2.2 传址调用传递的是地址传址调用可以让函数和主调函数之间建立真正的联系
返回列表