ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

指针:从入门到精通

指针:从入门到精通 第二章深入理解指针2今天我们再来学习几个指针的知识点目录第二章深入理解指针2文章目录二、野指针1.概念2.造成野指针的可能原因1.未初始化2.越界访问3.指针指向的空间释放3.如何避免野指针1.初始化2.在使用指针时避免越界访问3.避免返回局部变量的地址三、assert断言四、传值调用和传址调用总结一、const语句在创建变量时把const放在前面这个变量就无法改变了。例如这样n的值就无法修改了。那么const是如何约束指针变量的呢。我们可以发现当const放在*左边时指针指向的内容不可以改变但是指针的指向可以改变。当const放在*右边时指针指向的内容可以改变但是指针的指向不可以改变。二、野指针1.概念野指针的指向位置是不可知的随机的、不正确的、没有明确限制的指向的内容不属于当前程序。2.造成野指针的可能原因1.未初始化2.越界访问3.指针指向的空间释放指针指向text函数但是函数在调用完之后taxt函数空间会被释放p就会变成野指针。3.如何避免野指针对应野指针出现原因要从3个方面避免。1.初始化创建指针变量时一定要初始化。可以初始化成NULL。int* pNULL;NULL专门用来初始化指针变量初始化成NULL的指针变量意味着这个指针暂时没有指向有效空间我们暂时不能访问它。2.在使用指针时避免越界访问一个程序申请了多少空间通过指针也就只能访问多少空间不能超出范围访问。指针变量不再使用时要把该指针置为NULL在指针使用之前检查有效性。例子3.避免返回局部变量的地址如野指针出现的第三个原因不要返回局部变量的地址。三、assert断言assert.h定义了宏assert()用于在运行时确保程序符合指定条件如果不符合就报错停止运行。这个宏常常被称为“断言”。#includeassert.h assert(p!NULL);代码运行到上面的语句时验证p是否等于NULL。如果p确实不等于NULL程序继续运行否则就停止运行并且给出报错信息提示。assert()宏接受一个表达式作为参数。如果表达式为真就继续运行不产生任何作用继续运行。表达式为假assert就会报错并给出错误信息显示没有通过的表达式以及包含这个表达式的文件名和行号。如果确定了程序没有问题在#includeassert.h语句前面定义一个宏NDEBUG。#define NDEBUG然后重新编译编译器就会禁用文件中所有的assert()语句。如果程序又出现问题可以移除#define NDEBUG指令再编译。使用效果如下四、传值调用和传址调用学习指针是为了解决问题那什么问题非指针不可呢比如我们要实现一个函数来交换变量的大小首先我们用传值调用代码效果如下我们发现a和b的值并没有进行交换这是为什么呢。原因就是1.实参传递给形参的时候形参是实参的一份临时拷贝。2.对形参的修改是不影响实参的。这时候就要用到我们的指针了把变量的地址传入函数在函数中通过指针的解引用改变实参的值这就是传址调用了效果如下。成功实现了两个值的交换。我们要根据实际问题选择合适的方法。总结以上就是今天要讲的内容啦相信大家对于指针的使用又有了更深刻的理解。有什么问题欢迎大家留言讨论。
返回列表