C语言之指针初阶(1)

news2024/11/15 11:36:01

本章重点

1. 指针是什么

2. 指针和指针类型

3. 野指针

4. 指针运算

5. 指针和数组

6. 二级指针

7. 指针数组

今天我们讲解前4个稍微简单一点的内容,下一篇博客讲解后三部分

首先引入话题

我们口语讲到指针,比如p指针,其实想要表达的意思就是p是一个指针变量

取地址操作符&a取出a的地址,看上图代码

给大家画个图让大家初步认识一下学习指针需要用到的基本理论

32位机器上我们有32根物理电线,32根地址线通电后产生的电信号转化为数字信号,随机产生0  1组成的这样的二进制随机序列,一共有2的32次方个全0到全1的二进制序列

2的32次方个字节,每个地址标识一个字节,那我们就可以给2^32Byte == 2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB,在32位机器上最多能寻址(或者管理)4GB的空间,至于64位机器,大家参照32位机器的计算方式可以自己计算一下

在64位机器上,64个比特位就能存放64个01组成二进制数

指针变量是用来存放地址的,地址是唯一标示一个内存单元的

指针的大小在32位平台是4个字节,在64位平台是8个字节

下面指针类型的讲解,大家先别慌,先跟我的思路走,看下图

在X86环境下,打印的指针大小都是4个字节

在X64环境下,打印的指针大小都是8个字节

我们按住F10调试起来看到a在内存中的存储是倒着存放的,为什么呢,大家可以先不管,如果感兴趣,可以去我的数据在内存中的存储那两篇博客中去看一下,不懂的可以在评论区提问

下图是按住F10调试起来给大家有一些疑惑的地方做了一些注释,希望大家能够理解

 

我们将*pa赋值为0,可以看出全部改成了0

 

当我们把指针类型改成了字符指针,大家有没有发现我们只修改了1个字节,这是为什么呢?

这是因为指针类型决定了解引用操作的权限,看下图

下面给大家讲解指针+-整数

指针+-一的细节已经给出大家代码和讲解了,希望大家能够理解

下面是一个很有意思的知识点:野指针

概念:野指针就是指针指向的位置是不可知的  随机的  不正确的  没有明确限制的

野指针第一种情况 

指针未初始化

野指针第二种情况

指针越界访问

当P指向超过数组范围的位置时,P就已经越界访问了,这就是第二钟野指针的情况

第三种情况

局部变量的作用域进入函数创建,出来函数就销毁,但是return  &a把a的地址带回去了,*p又去访问,则就是非法访问

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

我们必须对指针进行严格地初始化,养成良好的代码习惯

例如,指针p使用完了之后需将其置为NULL(空)

接下来是第四个部分

指针的第一种和第二种运算已经给大家画出图了,大家自行阅读,理解起来还是比较容易

最后一种运算

对比简化前的代码简化后的代码,大家对比起来看,第二种代码就发生了错误

本章终,希望大家多多支持,下一博客我们讲解后面3个部分的知识,大家先复习一下前面讲过的知识

 

 

 

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

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

相关文章

【0基础自研记录】ESP32-CAM自制个人网络监控

目的:实现一个小型家庭监控 一、前期准备 1.硬件准备 esp32-acm烧录板烧录线 2.软件准备 Arduion IDE CH340串口驱动 下载地址如下 Arduion IDE:https://www.arduino.cc/en/software CH340串口驱动 链接:https://pan.baidu.com/s/1ri8dK7wW6KFz8rOPs…

已知一个整数,如何判断这个整数是无符号的?

前言 记录6月11日,肯哥在群里面分享的一个问题。说实话,看到题目想了半天没明白。一看答案,才发现,这题真的简单。 题目 已知一个整数,如何判断这个整数是无符号的? 题解 (1)因为我的…

JVM相关特性

每个使用Java的开发者都知道Java字节码是在JRE中运行(JRE: Java 运行时环境)。JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你对JVM有…

008:vue中el-upload不显示上传的文件列表

第008个 查看专栏目录: VUE — element UI echarts,openlayers,cesium,leaflet,mapbox,d3,canvas 免费交流社区 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例…

废柴日记8:从入门到入狱的Python爬虫学习笔记1(入门篇)

前言:我错了,但下次也不一定(●’◡’●) 米娜桑,好久不见,不知道这段时间各位手中的西瓜刀有没有按时擦亮呢? 我也是在摸爬滚打将近一年之后总算是找到了一点人生的方向所以当成救命稻草现在正死死握紧不放手的啊。…

【Windows 系统笔记】使用服务器运行装载AList+本地安装RaiDrive进行网盘本地挂载

文章目录 前言准备工作一、购买一台云服务器配置服务器安装宝塔面板新建网站进入当前目录 二、安装AList三、登录四、开启域名访问五、挂载阿里云盘刷新令牌 六、使用RaiDrive挂载到本地 前言 大家肯定很好奇我为什么要写一篇这样的文章,因为之前一直使用本地挂载网…

SQL索引

一、索引概述 介绍: 索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以…

【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)

一种很好用,很高效,又一学就会的数据结构,你确定不看看? 一、哈希表 Hash Table1.1 核心概念1.2 哈希函数 Hash Function1.3 哈希冲突 Hash Collision1.4 哈希冲突解决1.41 方法概述1.42 链地址法 Separate Chaining1.43 开放寻址…

几种技巧让大模型(ChatGPT、文心一言)帮你提高写代码效率!

代码神器 自从大模型推出来之后,似乎没有什么工作是大模型不能做的。特别是在文本生成、文案写作、代码提示、代码生成、代码改错等方面都表现出不错的能力。下面我将介绍运用大模型写代码的几种方式,帮助程序员写出更好的代码!(…

华为OD机试真题 JavaScript 实现【一种字符串压缩表示的解压】【2022Q4 100分】,附详细解题思路

一、题目描述 有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。 请您编写解…

shell脚本学习记录(重定向)

Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。 输出重定向 重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示: command1 > file1 上面这个命令执行command1然后将输出的…

maven访问仓库的顺序

1.没有配置私服的情况下(大部分情况下) 如上图所示,maven是依次从本地仓库、中央仓库和第三方仓库获取依赖的,其实在maven中并不是以这三种类型区分的,在maven中只有两种仓库类型,本地仓库和远程仓库&#…

Systemverilog中的Driving Strength讲解

在systemverilog中,net用于对电路中连线进行建模,driving strength(驱动强度)可以让net变量值的建模更加精确。net变量拥有4态逻辑值(0,1,z,x),它的driving strength有(supply,strong,pull,weak,highz)。net的值由连接到net的driver源(驱动源…

【开源工具】使用Whisper将提取视频、语音的字幕

这里写目录标题 一、语音转字幕操作步骤1、下载安装包Assets\WhisperDesktop.zip[^2]2、加载模型2.1 下载模型2.1.1 进入Hugging Face[^3]的仓库2.1.2 选择需要下载的模型2.1.3 配置模型路径 3、语音转字幕4、实时语言转录功能 二、相关简介[^1]特点开发人员指南构建说明其他注…

模拟退火(SA)算法

目录 模拟退火算法 主要代码 Mutate Sphere 模拟退火算法 主要代码 repmat 重复数组副本 B repmat(A,n) 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n。 unifrnd 生成连续统一的随机数 sort 对数组进行…

抖音百科词条创建在哪里?

抖音作为中国火爆的短视频平台,拥有相当庞大的用户群体,用户在抖音上创建百科词条就可以获得非常可观的曝光和展现,抖音百科词条是通过哪种方式创建的呢?想要创建一个抖音百科怎么做?接下来伯乐网络传媒就来给大家讲一…

Linux之进程信号(上)

文章目录 前言一、进程信号二、查看命令kill -l与信号解释man 7 signal1.kill -l2.man 7 signal 三、信号的产生1.按键ctrl cctrl zctrl \ 2.系统调用kill——向任意进程发送信号raise——进程给自己发送任意信号abort——进程给自己指定的信号(6号信号&#xff…

主流解压缩软件有哪些?这四款可以满足你的所有需求

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 第一款:bandizip(推荐) 第二款:7-zip 第三款:Nanazip 第四款&#xff1a…

Vue中如何进行表单自定义验证

Vue中如何进行表单自定义验证 在Vue应用中,表单验证是非常重要的一部分。Vue提供了一些内置的验证规则,比如required、min、max等。但是有时候我们需要对表单进行自定义验证,以满足特定的业务需求。本文将介绍如何在Vue中进行表单自定义验证…

第十章 数学相关

第十章 数学相关 第一节 集合 真题(2010-53)-数学相关-集合-画饼集能力-朴素逻辑 53.参加某国际学术研讨会的 60 名学者中,亚裔学者 31 人,博士 33 人,非亚裔学者中无博士学位的 4 人。根据上述陈述,参…