【C语言进阶】指针的高级应用(中)

本专栏介绍:免费专栏,并且会持续更新C语言知识,欢迎各位订阅关注。
关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章,坚持更新!
大家的支持才是更新的最强动力!

文章目录

  • 一、空指针与野指针
    • 1.1 空指针
    • 1.2 野指针
  • 二、对古怪指针的解读
    • 2.1 *p++的解读
    • 2.2 *++p的解读
    • 2.3 (*p)++的解读
    • 2.4 ++(*p)的解读
  • 三、指针的运算
  • 四、指针管理字符串
  • 总结

在这里插入图片描述

一、空指针与野指针

1.1 空指针

概念:指针变量指向内存中编号为0的空间。
作用:初始化指针变量。
注意:空指针指向的内存是不可以访问的,因为0-255之间的内存编号是系统占用的。

int main() {
//设置为空指针,即初始化
//指针变量p指向内存地址编号为0的空间int *p = NULL;
//但是不能访问空指针报错,或是其他编号的也不行
//因为内存编号0-255为系统占用内存,不允许用户访问cout << *p << endl;system("pause");
}

在这里插入图片描述

1.2 野指针

概念:指针变量指向非法的内存空间
因此在程序中应当避免出现野指针。
在这里插入图片描述

二、对古怪指针的解读

*p++*++p、(*p)++++(*p)

2.1 *p++的解读

由于这个写法不好显示,以下均用“它”来代指。它就相当于*(p++),因为++的优先级高于*,所以p先跟++结合然后跟星号结合。
但是因为++是后置的,本身的含义就是先运算后增加1,运算指的是 p++整体与前面的星号运算,然后再增加1,所以实际上* p++整体对外表现的是*p的值,运算完成后再加1。所以 *p++等同于:*p; p+=1;
在这里插入图片描述

2.2 *++p的解读

*++p等同于p+=1; * p;也就是先加1,然后再 *。
在这里插入图片描述

2.3 (*p)++的解读

(* p)++使用()强制将和p结合,只能先计算p,然后对*p整体的值+,也就是对p所指向的变量的数值进行+1操作。

2.4 ++(*p)的解读

先*p取地址值,再前置++,该值+1后作为整个表达式的值。

三、指针的运算

指针本身也是变量,因此可以进行运算。但是因为指针变量本身表示的是某个其他变量的地址值,因此该值进行*、/、%运算是无意义的。其次,两个指针本身相加也同样没有意义。
但是指针+1和-1是有意义的。
+1:表示指向指针所指向的格子(地址)向后移动一格;
-1:表示向前移动一格。

这里注意:+1是移动的格子,也就是一个格子代表的内存大小,等于数组的数据类型所占用的内存字节数,而不一定就是1个字节(相当重要的理解)。通过下面的代码输出的结果就可以证明这一点。

在这里插入图片描述

四、指针管理字符串

(1)C语言中定义字符串方法:char *p = “linux”;此时p就叫做字符串,但是实际上p只是一个字符指针(本质上就是一个指针变量,只是p指向了一个字符串的起始地址而已)。
(2)C语言中字符串的本质:指针指向头、固定尾部的地址相连的一段内存
(3)C语言中字符串有3个核心要点:

一、用一个指针指向字符串头;
二、固定尾部(字符串总是以’\0’来结尾);
三、组成字符串的各字符彼此地址相连。

(4)‘\0’是一个ASCII字符,其实就是编码(值)为0的那个字符(真正的0,和数字0是不同的,数字0有它自己的ASCII编码)。要注意区分’\0’和’0’和0.(0等于’\0’,‘0’等于48,带有’’表明是字符0,而不是数字(编码值)0)
(5)’\0’作为一个特殊的数字被字符串定义为(幸运的选为)结尾标志。产生的副作用就是:字符串中无法包含’\0’这个字符。(C语言中不可能存在一个包含’\0’字符的字符串),这种思路就叫“魔数”(魔数就是选出来的一个特殊的数字,这个数字表示一个特殊的含义,你的正式内容中不能包含这个魔数作为内容)。
在这里插入图片描述

注意:指向字符串的指针和字符串本身是分开的两个东西

char *p = “linux”;在这段代码中,p本质上是一个字符指针,占4字节;"linux"分配在代码段,占6个字节;实际上总共耗费了10个字节,这10个字节中:4字节的指针p叫做字符串指针(用来指向字符串的,理解为字符串的引子,但是它本身不是字符串),5字节的用来存linux这5个字符的内存才是真正的字符串,最后一个用来存’\0’的内存是字符串结尾标志(本质上也不属于字符串)。
在这里插入图片描述
在这里插入图片描述
注意:这个打印出来的不是“Y”,而是整个数组(字符串)。

总结

(1)
(2)++符号和指针结合,总共以上四种情况。–和++的情况很类似。

在这里插入图片描述

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

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

相关文章

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…

dialog => :before-close的属性应用

在element-ui里面关闭弹窗的时候before-close会触发。 也就是点击X的时候回触发before-close这个属性, 代码实例: <el-dialogtitle"新增用户":visible.sync"dialogVisible"width"50%":before-close"handleClose"> handleClose…

百分点科技跻身中国智慧应急人工智能解决方案市场前三

近日&#xff0c; 全球领先的IT市场研究和咨询公司IDC发布了《中国智慧应急解决方案市场份额&#xff0c;2022》报告&#xff0c;数据显示&#xff0c;2022年中国智慧应急整体市场为104亿元人民币。其中&#xff0c;智慧应急人工智能解决方案子市场备受关注&#xff0c;百分点科…

小成本大幅度增幅CNN鲁棒性,完美的结合GLCM+CNN

本文以实验为导向&#xff0c;使用vgg16GLCM实现一场精彩的新冠肺炎的分类识别&#xff0c;并且对比不加GLCM后的效果。在这之前&#xff0c;我们需要弄明白一些前缀知识和概念问题&#xff1a; GLCM&#xff08;Gray-Level Co-occurrence Matrix&#xff09;&#xff0c;中文称…

使用ChatGPT编写技术文档

技术文档对于任何项目都是至关重要的&#xff0c;因为它确保所有利益相关者都在同一层面上&#xff0c;并允许有效的沟通和协作。创建详细而准确的技术文档可能既耗时又具有挑战性&#xff0c;特别是对于那些不熟悉主题或缺乏强大写作技巧的人来说。ChatGPT 是一个强大的人工智…

解密爬虫ip是如何被识别屏蔽的

在当今信息化的时代&#xff0c;网络爬虫已经成为许多企业、学术机构和个人不可或缺的工具。然而&#xff0c;随着网站安全防护的升级&#xff0c;爬虫ip往往容易被识别并屏蔽&#xff0c;给爬虫工作增加了许多困扰。在这里&#xff0c;作为一家专业的爬虫ip供应商&#xff0c;…

torchvision.datasets数据加载失败

torchvision.datasets数据加载失败 如何使用torchvision.datasets进行自动下载数据失败&#xff0c;可以使用手动下载数据 Ctrl点击可以进入相关包文件&#xff0c;查找下载地址&#xff1a;https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 手动下载之后解压&#x…

使用Vscode编辑keil工程

一、需要安装的插件 1. Keil Assistant 2. C/C 3. 中文配置&#xff1a; 二、插件配置 1. Keil Assistant 添加Keil的安装路径 接下来就可以使用vscode编辑Keil的工程了&#xff0c;调试编译和下载程序需要返回到Keil中进行操作。 三、Vscode常用快捷键 可以自定义进行配置…

微信小程序开通账号

https://mp.weixin.qq.com/ 在该页面使用一个新邮箱注册一个账号&#xff0c;并且绑定一个微信号作为管理者用户&#xff0c;下次登录&#xff0c;在该页面&#xff0c;直接使用微信扫码后&#xff0c;选择账号登录

Spring Cloud Alibaba (一)

1 微服务介绍 1.1 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。 从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->S…

新手入门吉他买什么好?千元内VEAZEN费森VZ200和恩雅X1pro综合评测,你会选新型材质HPL还是传统木吉他?

千元内入门吉他少不了VEAZEN费森VZ200单板系列和恩雅X1 PRO系列这两款热门系列&#xff0c;最近很多初学者朋友来私信&#xff0c;咨询这两款琴有什么优缺点&#xff0c;哪一款更值得初学者选购&#xff0c;那么今天&#xff0c;就以它们为本期的评测主角&#xff0c;全方位评测…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿

1.简介 Fiddler本身的功能其实也已经很强大了&#xff0c;但是Fiddler官方还有很多其他扩展插件功能&#xff0c;可以更好地辅助Fiddler去帮助用户去开发、测试和管理项目上的任务。Fiddler已有的功能已经够我们日常工作中使用了&#xff0c;为了更好的扩展Fiddler&#xff0c…

【数据结构与算法——TypeScript】算法的复杂度分析、 数组和链表的对比

【数据结构与算法——TypeScript】 算法的复杂度分析 什么是算法复杂度(现实案例)&#xff1f; ❤️‍&#x1f525; 前面已经解释了什么是算法&#xff1f; 其实就是解决问题的一系列步骤操作、逻辑。 ✅ 对于同一个问题&#xff0c;我们往往有很多种解决思路和方法&#x…

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…

迭代器模式(Iterator)

迭代器模式是一种行为设计模式&#xff0c;可以在不暴露底层实现(列表、栈或树等)的情况下&#xff0c;遍历一个聚合对象中所有的元素。 Iterator is a behavior design pattern that can traverse all elements of an aggregate object without exposing the internal imple…

排序八卦炉之归并、计数

文章目录 1.归并排序1.1初识代码1.2代码分析1.3复杂度1.4非递归版本1.01.初识代码2.代码分析 1.5非递归版本2.01.初识代码2.代码分析 2.计数排序2.1初始代码2.2代码分析 1.归并排序 1.1初识代码 //归并排序 时间复杂度&#xff1a;O(N*logN) 空间复杂度&#xff1a;O(N) vo…

java中io流、属性集Properties、缓冲流、转换流、序列化和反序列化、打印流、网络编程(TCP通信程序、文件复制案例、文件上传案例、B/S服务案例)

IO流&#xff1a; io流中i表示input输入&#xff0c;o表示output输出&#xff0c;流表示数据&#xff08;字符&#xff0c;字节&#xff0c;1个字符2个字节8个位&#xff09;&#xff1b;这里的输入输出是以内存为基础&#xff0c;将数据从内存中输出到硬盘的过程称为输出&…

复旦大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 24计算机考研|上岸指南 复旦大学 复旦大学计算机考研招生学院是计算机科学与技术学院&#xff0c;软件学院&#xff0c;工程与应用技术研究院。目前均已出拟录取名单。 复旦大学计算机学科创建于中国计算机事业的起…

C语言数组笔试题(详解)

目录 插入知识&#xff1a; 一.指向函数指针数组的指针 二.回调函数 什么是回调函数&#xff1f; 三.数组笔试题 个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#xff1a;GOTXX &#x1f4…