c语言中“指针的运算”以及“野指针”assert断言

news2024/9/9 7:43:53

指针的运算:

1:指针+-整数

例如:若是按照下标的方式进行打印出数组

int arr[10]={1,2,3,4,5,6,7,8,9,0};

int  sz = sizeof(arr)/sizeof(arr[0]);

  for(int i=0;i<sz;i++)

  {

       printf("%d ",arr[i]);

  }

也可以按照指针的方式进行打印:

int *p=&arr[0];

for(int i=0;i<sz;i++)

{

      printf("%d ",*p);

     p++;

}

还可以:

           int *p=&arr[0];

          while(p<&arr[sz])

          {

                   printf("%d ",*p);

                   p++;

         }

//因为是整形,所以*p解引用得到4个字节,

1:指针的类型决定指针+1的步长,决定指针解引用权限

2:指针在内存中是连续

也可以改为减的:

int *p=&arr[sz-1];

for(int i=0;i<sz;i++)

{

printf("%d ",*p);

p--;

}

2:指针-指针

指针-指针的绝对值(因为有正负之分)是指针和指针之间的元素的个数

计算前提条件:两指针指向的是“同一空间”

例如:int arr[10]={0,1,2,3,4,5,6,7,8,9};

           printf("%d ",&arr[9]-&arr[0]);  //回车得到的是9。

//元素之间相差为9,所以最后打印出的值为9.

求字符串长度:strlen是求\0之前的字符串长度

int main()

{

char arr[]="abcdef";

size_t   len=my_strlen(arr);//调用函数进行求解字符串的长度

printf("%zd\n",len);

return 0;

}

普通求法:size_t  my_strlen(char *p){    //size_t是一种无符号整形

                  int count =0;

                 while(*p!='\0') 

                 {     //知道p一直数到\0.

                      count++;

                 }

                  return count;}

指针-指针的方式:

size_t  my_strlen(char *p){

         char *start=p;

         char *end=p;

         while(*end!='\0')

        {

                end ++;

         }   //令其数到最后

return end-start;}

野指针:

指针指向的位置是不可知的(随机的,不正确的)

例如:int main(){

              int *p;  //一个局部变量不初始化,它就是随机的

             *p=20;   //就是野指针 

         return 0;}

 以上的p是局部变量,但是未初始化,其值是随机的,若是将p存放的值当作地址,解引用操作符会形成非法访问

如何避免野指针?

如果明确知道指针指向哪里直接赋值,如果不知道指针指向哪里,可以赋值NULL

例如:

int  a=10;

int *p=&a;

int *p2=NULL;//不可进行解引用操作

*p2=200;  //错误写法,引发异常。

assert断言

assert.h头文件中定义了宏assert()用于运行时确保了程序符合指定条件,若是不符合就报错终止运行,这个宏常被称为“断言”

例如:#include<assert.h>

int main()

{

int *p=NULL;

assert(p!=NULL);  //因为为假,所以会报错

}

所以assert接受表达式为的话assert()不会产生任何作用,程序继续运行

若是表达式为假,assert()就会报错

assert不仅可以自动识别文件和出现的问题行号,还有一种无需更改代码就能开启和关闭的assert机制

在Debug中使用,在release中可选择禁用assert

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA某个项目被同事提交的代码导致不能进入Debug了,不是IDEA的问题。千万要避坑!

刚开始我发现突然不能进入debug了&#xff0c;打上去后就立马边灰了&#xff0c;我以为是我IDEA的问题&#xff0c;后来我换了其他项目都能正常进入debug. 而且后续&#xff0c;这个项目的其他同事也都不能进入debug了。 我就怀疑是项目中有人提交了代码导致的。 后来查…

必备插件自取 vue3.0 在vscode提升编码效率

一些vue开发中用到的插件&#xff0c;抽空总结一下&#xff0c;一是方便自己查看&#xff0c;另外是供其他需要的同学参考。在开发vue项目中&#xff0c;无论用什么编辑器一些好用的插件对我们来讲或许是必要的&#xff0c;因为好的插件既能方便我们编码&#xff0c;又能提升开…

文件解析漏洞--IIS--Vulhub

文件解析漏洞 一、IIS解析漏洞 用windowserver2003安装IIS测试 1.1 IIS6.X 方法一&#xff1a;目录解析 在网站下建立文件夹的名字为.asp/.asa的文件夹&#xff0c;其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 1.txt文件里是asp文件的语法查看当前时间 方…

PSO求解函数最小值的MATLAB例程|MATLAB源代码

本篇文章适合PSO入门&#xff0c;进阶的可能会觉得太简单的。 目录 PSO例程作用运行结果代码函数解释 例程修改tips PSO Particle Swarm Optimization&#xff0c;粒子群优化算法&#xff0c;通过模拟鸟群或鱼群的行为来寻找最优解。在计算时通过对一群粒子的位置和速度进行迭…

Stable Diffusion Windows本地部署超详细教程(手动+自动+整合包三种方式)

2022年作为AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;时代的元年&#xff0c;各个领域的AIGC技术都有一个迅猛的发展&#xff0c;给工业界、学术界、投资界甚至竞赛界都注入了新的“AI活力”与“AI势能”。 其中在AI绘画领域&#xff0c;Stable D…

内部类练习题

代码&#xff1a; public static void main(String[] args) {A anew A();a.f(); } class A{private String name"A";public void f(){class B{private String name"B";public void show(){System.out.println("A姓名为&#xff1a;"A.this.name…

智慧校园实训管理:打造高效实验项目管理系统

在智慧校园的实训管理框架中&#xff0c;实验项目管理功能是培养学生实践能力和创新精神的关键一环。这一功能通过数字化手段&#xff0c;实现了实验项目的全流程管理&#xff0c;从项目设计、资源调配、过程监控到成果评估&#xff0c;确保了实训活动的高效开展和教学质量的稳…

LabVIEW打开的视频格式IMAQ AVI Open

LabVIEW打开的视频格式IMAQ AVI Open LabVIEW所支持的视频解码器是有限的&#xff0c;不能支持所有的视频解码器。如果解码器选择的不正确&#xff0c;会出现的错误。 错误提示信息如下&#xff1a; Error -1074396009 occurred at IMAQ AVI Open Possible reason(s): An inter…

人工智能大模型发展带来的风险挑战和对策

经过近70年的发展&#xff0c;人工智能技术发展经历了三次起伏&#xff0c;2022年以来&#xff0c;以ChatGPT、Sora等为代表的预训练大模型持续取得突破&#xff0c;推动着人工智能技术从感知向认识&#xff0c;从分析判断式向生成式&#xff0c;从专用向通用进入快速发展的新阶…

提供一个下载国外DockerHub镜像的办法

由于众所周知的一些问题&#xff0c;国内现在下载国外的镜像比较难。尤其是比较新的版本的时候。 比如阿里云加速器的镜像库&#xff0c;skywalking-oap的最新版本也只有8.9&#xff0c;有时候不满足业务需要。官网目前最新10.0.1。很多情况下我们需要9以上版本。 提供几个办…

tomcat使用问题:安装后无法访问localhost:8080

一、tomcat 未启动 所以http://localhost:8080打不开&#xff1b; 二、环境变量未配置 tomcat图标显示已启动&#xff0c;但http://localhost:8080还是打不开&#xff0c;可能是环境变量没有配置好&#xff0c;关于怎么配置环境变量网上到处都是,一下仅供参考&#xff1a; …

halcon_C#联合halcon打开摄像头

1. 创建halcon项目 -> 2.测试连接 -> 3. 在halcon中打开摄像头成功 -> 4. 插入代码 -> 5. 导出为.cs文件 6. 创建VS项目 -> 7.将action部分代码嵌入winform -> 8. 编写代码 -> // 导入HalconDotNet命名空间&#xff0c;这是用于Halcon图像处理的…

MySQL存储引擎和

MySQL存储引擎 在数据库中保存的是一张张有着千丝万缕关系的表&#xff0c;所以表设计的好坏&#xff0c;将直接影响着整个数据库。而在设计表的时候&#xff0c;最关注的一个问题是使用什么存储引擎。MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种…

redis面试(四)ZSet数据结构

Sorted Set 有序集合ZSet&#xff0c;但是有序集合的英文明明是sorted sets。 那这个“Z”代表什么意思&#xff0c;这点官网没有解释&#xff0c;但是gitHub上有人问过&#xff0c;作者是这样回答的 Hello. Z is as in XYZ, so the idea is, sets with another dimension: t…

Selenium与WebDriver:Errno 8 Exec格式错误的多种解决方案

概述 在使用Selenium和WebDriver进行网页自动化时&#xff0c;可能会遇到各种错误。其中一个常见问题是执行格式错误&#xff08;Errno 8 Exec format error&#xff09;。这个错误通常在运行ChromeDriver时出现&#xff0c;错误提示涉及路径中的某个文件&#xff0c;如THIRD_…

WordPress建站教程:零基础新手小白如何B2B外贸建站

如果你想通过独立站拿询盘获取订单&#xff0c;那么必须先要有一个自己的网站&#xff0c;所以建站是你绕不过去的一件事。对于零基础的新手小白来说&#xff0c;如何从零开始搭建一个B2B外贸网站呢&#xff1f;本文将为你提供一份详细的WordPress建站教程&#xff0c;帮助你从…

NodeJS云观影应用系统-计算机毕业设计源码60580

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的基于Vue框架实现云观影应用系统成为一个热门。然而电影信息的表示相当复杂&#xff0c;因此需要开发一个基于Vue框架实…

Navicat for MySQL 17 实现更明智的业务决策

5 月 12 日&#xff0c;Navicat 对现有产品进行了几项重大更新&#xff0c;包括 Navicat Premium、Navicat BI 和 Navicat Data Modeler。最受欢迎的 Navicat 工具之一&#xff0c;Navicat for MySQL&#xff0c;也得到了新的更新&#xff0c;获得了许多与 Navicat Premium 相同…

PostgreSQL——查询扫描介绍

顺序扫描 概述 顺序扫描&#xff08;Sequential Scan&#xff09;是PostgreSQL中一种基本的数据检索方式&#xff0c;它通过按顺序读取表中的所有页面来查找满足查询条件的记录。这种方式不依赖于索引&#xff0c;因此在某些情况下可能是唯一的选择&#xff0c;尤其是当表没有…

熵权法确定权重

熵权法&#xff08;Entropy Weight Method, EWM&#xff09;是一种在综合考虑各因素提供信息量基础上计算综合指标的数学方法&#xff0c;属于客观综合定权法&#xff0c;在确定权重时更有说服力。该方法主要根据各指标传递给决策者的信息量大小来确定权重。在信息论中&#xf…