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

指针的运算:

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.rhkb.cn/news/387948.html

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

相关文章

【简单介绍Gitea】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

吴恩达老师机器学习-ex4

梯度检测没有实现。有借鉴网上的部分 导入相关库&#xff0c;读取数据 因为这次的数据是mat文件&#xff0c;需要使用scipy库中的loadmat进行读取数据。 通过对数据类型的分析&#xff0c;发现是字典类型&#xff0c;查看该字典的键&#xff0c;可以发现又X&#xff0c;y等关…

类和对象【下】

一、类的默认成员函数 默认成员函数从名字就告诉我们何为默认成员函数&#xff0c;即&#xff1a;用户没有实现&#xff0c;编译器默认自动实现的函数。 这时你不禁一喜&#xff0c;还有这好事&#xff0c;编译器给我打工&#xff0c;那么&#xff0c;我们今天都来了解一下都有…

漏洞复现-路由器TOTOLINK-A6000R-RCE

本文来自无问社区&#xff0c;更多漏洞信息可前往查看http://wwlib.cn/index.php/artread/artid/14996.html 0x01 产品简介 TOTOLINK A6000R是一款性能卓越的无线路由器&#xff0c;采用先进的技术和设计&#xff0c;为用户提供出色的网络体验。其支持最新的Wi-Fi标准&#x…

锅总详解开源组织之ASF

ASF是什么&#xff1f;ASF孵化的顶级项目有哪些&#xff1f;ASF顶级项目商用化有哪些&#xff1f;涉及的版权是什么&#xff1f;应用案例有哪些&#xff1f;衍生项目及其关联是什么&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、ASF简介 Apache Software Foundati…

Centos7.6安装Nginx(yum安装和源码安装)

Centos7.6安装Nginx&#xff08;yum安装和源码安装&#xff09; 简介 yum安装 源码安装 安装后的事情 常见问题 简介 Nginx&#xff08;发音为“engine X”&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也可以作为邮件代理服务器使用。它被广泛应用于高流量…

程序员面试中的“八股文”:是助力还是阻力?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

使用 ChatGPT 检测媒体偏见的潜力和局限性

概述 随着数字时代的到来&#xff0c;信息瞬间传遍全球&#xff0c;但其中也不乏各种偏见。媒体偏见"&#xff0c;即对某些观点的选择性报道&#xff0c;会影响人们对某一事件或问题的看法&#xff0c;并对公众舆论产生重大影响。事实上&#xff0c;许多人都认为主要媒体…

Data Augmentation数据增强

目录 数据增强是什么 为什么数据增强 数组增强分类 有监督数据增强 无监督数据增强 数据增强是什么 数据增强又称数据扩增&#xff0c;是一种通过应用合理且随机的变换&#xff08;例如图像位移、旋转&#xff09;来增加训练集多样性的技术。让有限的数据产生等价于更多数…

现在有什么赛道可以干到退休?

最近&#xff0c;一则“90后无论男女都得65岁以后退休”的消息在多个网络平台流传&#xff0c;也不知道是真是假&#xff0c;好巧不巧今天刷热点的时候又看到一条这样的热点&#xff1a;现在有什么赛道可以干到退休&#xff1f; 点进去看了几条热评&#xff0c;第一条热评说的…

自动化测试概念篇

目录 一、自动化 1.1 自动化概念 1.2 自动化分类 1.3 自动化测试金字塔 二、web自动化测试 2.1 驱动 2.2 安装驱动管理 三、selenium 3.1 ⼀个简单的web自动化示例 3.2 selenium驱动浏览器的工作原理 一、自动化 1.1 自动化概念 在生活中&#xff1a; 自动洒水机&am…

为什么说脱离决策的数据分析都是无用功

如果你问我数据分析师最重要的能力是什么&#xff0c;我的回答是数据驱动决策&#xff0c;这是数据分析师最值钱的能力&#xff0c;没有之一。 因为数据的价值在于挖掘&#xff0c;与业务和市场进行关联&#xff0c;找到机会点。抛开这个&#xff0c;数据本身一文不值&#xf…

deployment

一.deployment rc和rs控制器都是控制pod的副本数量的&#xff0c;但是&#xff0c;他们两个有个缺点&#xff0c;就是在部署新版本pod或者回滚代码的时候&#xff0c;需要先apply资源清单&#xff0c;然后再删除现有pod&#xff0c;通过资源控制&#xff0c;重新拉取新的pod来实…

杭州东网约车管理再出行方面取得的显著成效

随着科技的飞速发展&#xff0c;网约车已成为人们日常出行的重要选择。在杭州这座美丽的城市&#xff0c;网约车服务更是如雨后春笋般蓬勃发展。特别是杭州东站&#xff0c;作为杭州的重要交通枢纽&#xff0c;网约车管理显得尤为重要。近日&#xff0c;沧穹科技郑重宣告已助力…

昇思25天学习打卡营第XX天|Pix2Pix实现图像转换

Pix2Pix是一种基于条件生成对抗网络&#xff08;cGAN&#xff09;的图像转换模型&#xff0c;由Isola等人在2017年提出。它能够实现多种图像到图像的转换任务&#xff0c;如从草图到彩色图像、从白天到夜晚的场景变换等。与传统专用机器学习方法不同&#xff0c;Pix2Pix提供了一…

Java抽象类和抽象方法

以下文章只是自己十分粗浅的理解&#xff0c;和简单的使用方法&#xff0c;没有很深度的学习理解 Java的抽象类和抽象方法都是使用abstract关键字进行修饰。 抽象类 声明格式&#xff1a;" abstract 权限修饰符 class 类名 {...} " 抽象方法 声明格式&#xff1a;“…

Seata 入门与实战

一、什么是 Seata Seata 是一款开源的分布式事务解决方式&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式事务解决方案。 二、Seata 组成 事务协调者&#xff08;Transacti…

数据结构 - 红黑树

文章目录 前言一、红黑树介绍1、红黑树的概念2、红黑树的性质 二、实现红黑树1、基本框架2、插入3、删除4、查找5、测试红黑树6、红黑树代码 三、红黑树性能四、AVL树和红黑树的差别 前言 红黑树是一种二叉搜索树&#xff0c;所以学习前需要学会基本的二叉搜索树&#xff0c;并…

OnlyOffice在线部署

部署服务环境&#xff1a;Centos7.6 curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash 安装yum-utils工具 yum install yum-utils 添加nginx.repo源(Nginx官网有最新版&#xff0c;直接copy即可) vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx st…

Stable Diffusion 使用详解(4)---- 制作情景文本

目录 背景 制作流程 绘制底图 书写提示词 选底模 常规参数设置 controlNet 处理 Candy controlNet 设置 Depth controlNet 设置 输出效果 改进 适当修改提示词 适当修改controlNet 适当修改底模 背景 制作情景文本&#xff0c;将文本较好的融入背景图片。首先要…