当前位置: 首页 > news >正文

C语言的灵魂---指针(基础)

C语言灵魂指针

  • 1.什么是指针?
  • 2.指针的大小
  • 3.指针的分类
    • 3.1比较常规的指针类型
    • 3.2指针的解引用操作
    • 3.3野指针
      • 野指针的成因:
  • 4.指针运算
    • 4.1指针加减整数
    • 4.2指针-指针

1.什么是指针?

这个问题我们通常解释为两种情况:
1.指针本质:指针是内存中一个最小单元编号,也就是地址;
2.我们通常说的指针,其实是表示指针变量,是用来存放地址的变量工具;
总结:指针是指针变量用于存放变量地址的变量工具,本质是地址

2.指针的大小

指针大小这里就直接给出答案:
在32位平台,指针(地址)大小为4个字节;
在64位平台,指针(地址)大小为8个字节;

3.指针的分类

指针分类还是比较多,也相对来说比较丰富,接下来我们就一个个来了解指针的类型吧!

3.1比较常规的指针类型

char  *p = NULL;
short *p = NULL;
int   *p = NULL;
long  *p = NULL;
float *p = NULL;
double*p = NULL;

有上面的比较常见的指针类型,不难得出:指针的定义方式为---->type + *

而且这里还有个性质:
定义的type为什么类型,那么指针变量存储的相应类型的变量地址。

举个例子:
比如char*类型的指针,是为了存放char类型变量的地址

char ch='w';
char *p=&ch;
//这里&(取地址符号),是为了取出ch变量的地址;

提出疑问,指针这么多类型有什么意义呢?
回答:不同类型的指针也就有着不同的“步长”,也就是一次性访问的字节大小,比如char指针一次访问1个字节,而int类型的指针一次性就可以访问4个字节。这在C语言的底层 ,意义重大。

说道“步长”就有必要说一下指针加减整数:
在这里插入图片描述
这里就可以看见char类型的指针加整数1,地址变化了1个字节,而int类型的指针加1,地址变化了4个字节

3.2指针的解引用操作

#include <stdio.h>
int main()
{int n = 0x11223344;char *pc = (char *)&n;int *pi = &n;*pc = 0;   //重点在调试的过程中观察内存的变化。*pi = 0;   //重点在调试的过程中观察内存的变化。return 0;}


这里我们可以看到char类型的pc指针,只改变了n的第一个字节;接着往下运行
在这里插入图片描述
我们也容易的发现:int
类型的pi指针,直接把n的4个字节都变成了0;

在个例子中,pc或者是pi如果都按整形打印,那么他们完全就是整形n的值,* +变量指针就是访问变量指针地址,若打印规定%d整形打印,他就会往后把4个字节都翻译了(翻译过程就是补码到原码的过程)

这里也是表明不同类型解引用访问的内存大小不同;

3.3野指针

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

野指针的成因:

1.指针未初始化;
2.指针越界访问;
3.指针指向空间释放;

4.指针运算

4.1指针加减整数

指针加减整数,也就是在原指针的基础上,增加或者减少 整数 * sizeo(type)
例如:

#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p1 = arr;
int* p2 = arr + 4;printf("p1=%p\np2=%p", p1, p2);return 0;
}

在这里插入图片描述
我们可以发现p2=p1+4,相当于增加4*sizeof(int)也就是16;

4.2指针-指针

指针减指针代表的是两个地址之间的距离(两地址之间相差的元素个数(int)类型),返回的是int数据。指针和指针之间是没有相加的,相加没有意义;
在这里插入图片描述
总有浪漫值得奔赴!
请添加图片描述

相关文章:

C语言的灵魂---指针(基础)

C语言灵魂指针1.什么是指针&#xff1f;2.指针的大小3.指针的分类3.1比较常规的指针类型3.2指针的解引用操作3.3野指针野指针的成因&#xff1a;4.指针运算4.1指针加减整数4.2指针-指针1.什么是指针&#xff1f; 这个问题我们通常解释为两种情况&#xff1a; 1.指针本质&#…...

带你一文透彻学习【PyTorch深度学习实践】分篇——线性模型 梯度下降

分享给大家一段我国著名作家、散文家史铁生先生的一段话: 把路想象的越是坎坷就越是害怕,把山想象的越是险峻就越会胆怯,把别人想象的越是优秀就越是不敢去接近。惯于这样想象的人,是天生谦卑的人。 --------史铁生《关于恐惧》 🎯作者主页:追光者♂🔥 �…...

Javascript如何截取含有表情的字符串

Javascript如何截取含有表情的字符串 一、说说背景 社区社交应用中&#xff0c;难免会有输入用户昵称的操作&#xff0c;如果用户老老实实的输入中文汉字或者英文字母&#xff0c;那当然没啥问题&#xff0c;我们能够轻松的处理字符串的截取&#xff0c;产品说按多少字符截取…...

【云原生】prometheus结合jmx exporter 的java agent模式采集tomcat监控实战

前言 大家好&#xff0c;我是沐风晓月&#xff0c;今天我们又来探讨一款使用prometheus监控tomcat的另外一种形式&#xff1a;Java agent模式。 如果你想使用http server模式&#xff0c;请参考&#xff1a;【云原生】prometheus结合jmx exporter 的http server模式采集tomca…...

深度学习应用技巧总结与pytorch框架下训练过程的记忆技巧

大家好&#xff0c;我是微学AI&#xff0c;今天给大家总结一下深度学习模型训练过程中的一些技巧总结&#xff0c;以及pytorch框架下训练过程的记忆技巧&#xff0c;很有用的干货&#xff0c;理解模型训练过程的步骤&#xff0c;让流程难懂&#xff0c;难记忆的过程变得简单&am…...

数字图像处理 基于OpenCV的一种简单的阴影校正的方法

一、简述 在很多工业场景,都是基于工业相机、或者结合显微镜进行拍照采样,以进行进一步的分析,通常情况下分析结果和图像的质量息息相关,我们这里讨论的主要是因光照不均衡而在图像边缘产生阴影的图像的校正。 1、亮度阴影 亮度阴影(光学上称为渐晕,Vignetting)就是我们…...

OpenHarmony之cJSON库使用介绍

一、前言 我们前面OpenHarmony设备配网 文章中&#xff0c;给大家提供的示例有使用cJSON解析和cJSON创建json数据的用法 那么有同学会提出疑问&#xff0c;我难道只能用cJSON库&#xff1f; 当然不是啊&#xff0c;你也可以用 json-parser、parson、jansson 等等三方库 回到正题…...

门面设计模式

介绍 Java门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了复杂系统的实现细节,使得客户端可以更加容易地使用系统. 在Java门面模式中,一个门面对象(Facade)提供了一个简单的接口,该接口包装了一个或多个复杂的子系统,客户端可以直接使用门面对象…...

苹果手写笔好用吗?比较好用的ipad手写笔推荐

随着技术的进步&#xff0c;各种新型的电子产品和数码器件层出不穷。比如智能手机、IPAD、以及电容笔。而在实际生活中&#xff0c;为了更好的利用ipad&#xff0c;我们需要一支好用的电容笔。就好比如我们在ipad上做笔记&#xff0c;要用手来进行手写记录&#xff0c;会很不方…...

GPT-4来了!看看她究竟强在哪里!

GPT-4来了&#xff01;OpenAI老板Sam Altman直接开门见山地介绍说&#xff1a;这是我们迄今为止功能最强大的模型&#xff01;GPT-4是一个超大的多模态模型&#xff0c;也就是说&#xff0c;它的输入可以是文字&#xff08;上限2.5万字&#xff09;&#xff0c;还可以是图像。我…...

GPT-4 API 接口调用及价格分析

GPT-4 API 接口调用及价格分析 15日凌晨&#xff0c;OpenAI发布了万众期待的GPT-4&#xff01;新模型支持多模态&#xff0c;具备强大的识图能力&#xff0c;并且推理能力和回答准确性显著提高。在各种专业和学术基准测试上的表现都媲美甚至超过人类。难怪OpenAI CEO Sam Altm…...

MySQL高级功能:存储过程、触发器、事务、备份和恢复

MySQL高级功能MySQL是一款广泛使用的关系型数据库管理系统&#xff0c;它不仅具有基本的数据库功能&#xff0c;还支持一些高级功能&#xff0c;如存储过程、触发器、事务、备份和恢复等。这些高级功能可以帮助开发人员更高效地管理和维护数据库&#xff0c;本文将介绍MySQL的高…...

SAP 发出商品业务配置

SAP发出商品业务配置&#xff0c;即&#xff1a; 出具销售发票时结转成本 一、业务背景&#xff1a; 发出商品业务简单的理解为跨月开票&#xff0c;即出库与开票不在同一个月份。 该业务在系统内的实现方式&#xff0c;为保证成本与收入的配比&#xff0c;在出库时不计算成…...

C++线程池理解

线程池基本信息 线程池是一种结合池化思想衍生出来的一种线程管理及使用的方案 其主要针对服务器端多线程场景下&#xff0c;服务器频繁接收请求&#xff0c;每个请求都分配一个单独的线程去处理。 使用线程的开销&#xff1a; 创建和销毁线程调度线程 线程池主要解决的核…...

2023年最新软著申请流程(一):软件著作权说明、国家版权官网的账号注册与实名认证

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/129230460 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...

SuperMap iServer如何发布S3对象存储中的瓦片

作者&#xff1a;Carlo 前言&#xff1a; S3 对象存储服务是一个基于对象的海量存储服务&#xff0c;为客户提供海量、安全、高可靠、低成本的数据存储能力。其海量、安全的特性&#xff0c;为存储海量瓦片提供可能。 SuperMap iServer 支持将存储在阿里云对象存储 (OSS)、华为…...

ElasticSearch-第四天

目录 ElasticSearch文档分值_score计算底层原理 relevance score算法 Term frequency Inverse document frequency Field-length norm 分析一个document上的_score是如何被计算出来的 分词器工作流程 切分词语 内置分词器的介绍 定制分词器 ik分词器详解 IK分词器自…...

基于鲸鱼算法的极限学习机(ELM)分类算法-附代码

基于鲸鱼算法的极限学习机(ELM)分类算法 文章目录基于鲸鱼算法的极限学习机(ELM)分类算法1.极限学习机原理概述2.ELM学习算法3.分类问题4.基于鲸鱼算法优化的ELM5.测试结果6.参考文献7.Matlab代码摘要&#xff1a;本文利用鲸鱼算法对极限学习机进行优化&#xff0c;并用于分类问…...

一文彻底读懂webpack常用配置

开发环境 const webpack require("webpack"); const path require(path) module.exports {// entry: {// a: ./src/0706/a.js,// c: ./src/0706/c.js,// },entry: "./src/0707/reactDemo.js",output: {filename: [name]_dist.js,path: path.resolve(__…...

大环境不好,找工作太难?三面阿里,幸好做足了准备,已拿offer

三面大概九十分钟&#xff0c;问的东西很全面&#xff0c;需要做充足准备&#xff0c;就是除了概念以外问的有点懵逼了&#xff08;呜呜呜&#xff09;。回来之后把这些题目做了一个分类并整理出答案&#xff08;强迫症的我狂补知识&#xff09;分为软件测试基础、Python自动化…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...