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

前言

        前文介绍完了一些指针基本概念,下面介绍一下,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://www.hqwc.cn/news/670960.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不考408的985,不想考408的有福了!吉林大学计算机考研考情分析

吉林大学&#xff08;Jilin University&#xff09;简称吉大&#xff0c;位于吉林长春&#xff0c;始建于1946年&#xff0c;是中华人民共和国教育部直属的综合性全国重点大学&#xff0c;国家“双一流”、“211工程”、“985工程”、“2011计划”重点建设的著名学府&#xff0…

控制台调试 hover 后才出现的元素

调试 hover后才出现的元素 打开开发者工具&#xff0c;鼠标放在hover时才出现的元素上&#xff0c;然后点击右键&#xff1b; 不要选中任何选项&#xff0c;将鼠标移动到开发者工具的调试面板中&#xff1b; 按下N键&#xff0c;此时悬浮的元素不会消失&#xff0c;定位成功。…

2024年电工杯数学建模竞赛A题B题思路代码分享

您的点赞收藏是我继续更新的最大动力&#xff01; 欲获取更多电工杯学习资料&#xff0c;可点击如下卡片链接 点击链接加入群聊【2024电工杯】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&k_PrjarulWZU8JsAOA9gnj_oHKIjFe195&authKeySbv2XM853pynlnXiv6M58…

【0day】湖南建研工程质量检测系统InstrumentUsageRecordExport接口处存在任意文件读取漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集下载与展示 (train_image,train_label),(test_image,test_label) tf.keras.datasets.fashion_mnist.l…

JS基础:变量的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取…

数据库SQL语言实战(七)

前言 这次的有一点点难~~~~~我也写了好久 练习题 题目一 在学生表pub.student中统计名字&#xff08;姓名的第一位是姓氏&#xff0c;其余为名字&#xff0c;不考虑复姓&#xff09;的使用的频率&#xff0c;将统计结果放入表test5_01中 create table test5_01(First_name…

Docker容器:Docker-Consul 的容器服务更新与发现

目录 前言 一、什么是服务注册与发现 二、 Docker-Consul 概述 1、Consul 概念 2、Consul 提供的一些关键特性 3、Consul 的优缺点 4、传统模式与自动发现注册模式的区别 4.1 传统模式 4.2 自动发现注册模式 5、Consul 核心组件 5.1 Consul-Template组件 5.2 Consu…

esp32+mqtt协议+paltformio+vscode+微信小程序+温湿度检测

花费两天时间完成了这个项目&#xff08;不完全是&#xff0c;属于是在resnet模型训练和温湿度检测两头跑......模型跑不出来&#xff0c;又是第一次从头到尾独立玩硬件&#xff0c;属于是焦头烂额了......&#xff0c;完成这个项目后&#xff0c;我的第一反应是写个csdn&#…

如何delphi7中添加自定义的控件或组件

1.问题 为了编写方便&#xff0c;会自己生成一些自定义的控件。 XXX.PAS:源码文件&#xff0c;后续可以再调整 XXX.DCU:编译后的文件 2.解决办法 1.自定义控件的文件如下 2.将这些文件保留在程式代码中&#xff0c;万一丢失会导致程式开启后报是否忽略 3.选择菜单栏中的com…

简述前后端分离架构案例

Hello , 这里是小恒不会java 。今晚1点写写关于RESTful接口的使用案例&#xff0c;本文会通过django原生js前后端分离的案例简单讲解。本文带你认识一下简化版的前后端分离架构 代码 本文案例代码在GitHub上 https://github.com/lmliheng/fontend前后端分离 先说说什么是前后…

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析&#xff1a; 游戏中角色不会只有一种武器&#xff0c;不同武器需要不同模型&#xff0c;甚至可能需要角色持握武器的不同位置&#xff0c;因此需要添加专门的武器类&#xff0c;方便武器后续更新&#xff0c;建立一个武器类。 2.操作实现&#xff1a; 1.在ue5中新建…