当前位置:首页 » 《我的小黑屋》 » 正文

初识指针(2)<C语言>

2 人参与  2024年05月25日 17:26  分类 : 《我的小黑屋》  评论

点击全文阅读


前言

        前文介绍完了一些指针基本概念,下面介绍一下,const关键字、指针的运算、野指针的成因以及避免,assert函数等。


目录

const(常属性)

变量的常属性

 指针的常属性

 指针的运算

①指针+ -整数

②指针-指针

 ③指针与指针的比较

 野指针的成因以及避免

①指针未初始化,就使用

②指针越界访问数组 

 ③指针使用已释放的地址

assert(断言)函数


const(常属性)

变量的常属性

        变量是可以被修改的,也可以通过将其地址交给指针变量来进行修改。如果在变量声明阶段,在变量名前加上const,那么这个变量就具有了常属性,在后面就不能进行修改了。

         报错了,程序也不能正常运行。

 指针的常属性

        指针变量是否也能使用const来限制变量的修改呢?如果能够修改,const应该放哪呢?

在此之前先讲一讲3个容易弄混的概念(以指针变量p为例)

①p——指针变量,里面存放着一个地址

②*p——p中存放地址指向的对象

③&p——指针变量p的地址

两种情况:①const在“*”左边,限制的是*p,也就是p中存放地址指向的对象

        可以看到解引用指针p时报错,但是更改p中的地址是可以的。

②const在“*”右边,限制的是p中指向的对象。

        同理, 可以看到更改指针p指向地址时报错,但是更改p中的地址的对象的值是可以的。

        

 指针的运算

        指针的运算主要有以下三种:

①指针+ -整数

②指针-指针

③指针与指针的比较

①指针+ -整数

        上文说到,指针类型决定了指针向前一步或向后一步“走”多大距离,数组名是一个地址常量,存放的是第一个元素的地址,那么是否能够通过加减指针完成对数组的访问呢?

②指针-指针

        指针与指针的加法是无意义的。但是可通过指针与指针之间的减法完成对数组元素个数的统计。

 ③指针与指针的比较

        

 野指针的成因以及避免

        野指针就是指针指向位置是不可知的(随机的、不正确的、没有限制的)

成因:

①指针未初始化,就使用

②指针越界访问数组

③指针使用已释放的地址

①指针未初始化,就使用

②指针越界访问数组 

          因为指针越界访问数组导致打印出野指针

 ③指针使用已释放的地址

避免

①初始化指针,如果不知道指向哪,可以将指针赋值给NULL

②小心越界

③指针不再使用时及时置NULL,使用指针时,先检查指针的有效性

④避免返回局部变量的地址

assert(断言)函数

        assert()函数包含在库函数<assert.h>中,使用时需先声明。

        用法:用于确保程序满足指定条件,如果不符合,就报错终止运行

 也可以在函数开始加上#define NDEBUG使文件中的assert()函数失效,在release环境中默认失效。


点击全文阅读


本文链接:http://zhangshiyu.com/post/113534.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1