【C语言】初识指针
目录
一、指针是什么
二、指针和指针类型
三、野指针
四、指针运算
五、指针和数组
六、二级指针
七、指针数组
一、指针是什么
指针就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同(指针本质就是地址)
我们可以这么理解:

#include <stdio.h>
int main()
{int a = 10;//在内存中开辟一块空间int* p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。//将a的地址存放在p变量中,p就是一个之指针变量。return 0;
} 二、指针和指针类型
当有这样的代码时
int num = 10;
p = #
char *pc = NULL;
int *pi = NULL;
short *ps = NULL;
long *pl = NULL;
float *pf = NULL;
double *pd = NULL; 😐这里可以看到,指针的定义方式是:type + * 。其实:char* 类型的指针是为了存放 char 类型变量的地址.short* 类型的指针是为了存放 short 类型变量的地址.int* 类型的指针是为了存放 int 类型变量的地址.
#include <stdio.h>
//演示实例
int main()
{int n = 10;char* pc = (char*)&n;int* pi = &n;printf("%p\n", &n);printf("%p\n", pc);printf("%p\n", pc + 1);printf("%p\n", pi);printf("%p\n", pi + 1);return 0;
} 😐总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。
int main()
{int n = 0x11223344;char* pc = (char*)&n;int* pi = &n;*pc = 0; //重点在调试的过程中观察内存的变化。*pi = 0; //重点在调试的过程中观察内存的变化。return 0;
} 😀总结:指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。 比如 char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。
三、野指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
#include <stdio.h>
int main()
{ int *p;//局部变量指针未初始化,默认为随机值*p = 20;return 0;
} #include <stdio.h>
int main()
{int arr[10] = {0};int *p = arr;int i = 0;for(i=0; i<=11; i++){//当指针指向的范围超出数组arr的范围时,p就是野指针*(p++) = i;}return 0;
} #include <stdio.h>
int main()
{int *p = NULL;//....int a = 10;p = &a;if(p != NULL){*p = 20;}return 0;
} 四、指针运算
#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指针+-整数;指针的关系运算
for (vp = &values[0]; vp < &values[N_VALUES];)
{*vp++ = 0;
} 😀 指针-指针
int my_strlen(char *s)
{char *p = s;while(*p != '\0' )p++;return p-s;
}
for(vp = &values[N_VALUES]; vp > &values[0];)
{*--vp = 0;
}
😀指针的关系运算
for(vp = &values[N_VALUES]; vp > &values[0];)
{*--vp = 0;
}
for(vp = &values[N_VALUES-1]; vp >= &values[0];vp--)
{*vp = 0;
} 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
五、指针和数组
#include <stdio.h>
int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,0};printf("%p\n", arr);printf("%p\n", &arr[0]);return 0;
} 运行结果:

int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int *p = arr;//p存放的是数组首元素的地址 既然可以把数组名当成地址存放到一个指针中,我们使用指针来访问一个就成为可能。
#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,0};int *p = arr; //指针存放数组首元素的地址int sz = sizeof(arr)/sizeof(arr[0]);for(i=0; i<sz; i++){printf("&arr[%d] = %p <====> p+%d = %p\n", i, &arr[i], i, p+i);}return 0;
}
运行结果:

六、二级指针

int b = 20;
*ppa = &b;//等价于 pa = &b; **ppa = 30;
//等价于*pa = 30;
//等价于a = 30;
int arr1[5];
char arr2[6];
七、指针数组

int* arr3[5]; 相关文章:
【C语言】初识指针
目录 一、指针是什么 二、指针和指针类型 三、野指针 四、指针运算 五、指针和数组 六、二级指针 七、指针数组 一、指针是什么 指针就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度…...
FFMPEG自学一 音视频解封装
一、音视频包含哪些数据对于一个mp4文件我们可以通过音视频分析软件打开查看内部信息。从两图可以看出mp4文件一般包含 音频流 视频流等。对于上面的字段大致分析如下Format编码方式AVC现在大部分视频都是这种编码方式,即H264。CodecId编码器idavc1H264封装有2种格式…...
HoloLens 2 丨打包丨MRTK丨Unity丨新手教学
HoloLens 2打包流程制作前言开发工具介绍Visual Studio 2019MRTK插件或示例程序下载打包流程介绍Unity操作修改Visual Studio修改Hololens 修改Hololens 密码忘记总结前言 提示:今日功能介绍 使用 MRTK制作hololens 2的打包流程制作的新手教学。 开发工具介绍 这…...
AcWing语法基础课笔记 第四章 C++中的数组
第四章 C中的数组 程序 逻辑 数据,数组是存储数据的强而有力的手段。 ——闫学灿 一维数组 数组的定义 数组的定义方式和变量类似。 数组的初始化 在main函数内部,未初始化的数组中的元素是随机的。 访问数组元素 通过下标访问数…...
UTF小结
运行测试 编辑测试 运行模式:程序集Platform平台选择 Any Platforms编辑模式:程序集Platform平台选择 Editor 特性 Test、UnityTest特性:测试方法需要添加Test或UnityTest特性,测试方法是公有的SetUp、TearDown特性:…...
(考研湖科大教书匠计算机网络)第四章网络层-第六节3:开放最短路径优先OSPF的基本工作原理
获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:OSPF概述(1)概述(2)细节阐述A:链路状态和代价B:问候分组和邻居表Cÿ…...
积水在线监测仪——积水点、易涝点水位监测设备
一、设备概述 积水在线监测仪是一款用于城市积水点、易涝点等场景的水位监测设备,设备采用电池供电,无需另外供电,安装方便,使用简单。可以时监测水点、易涝点水位情况,当水位数据超过阈值后触发告警上传,…...
DCMM认证机构
一、什么是DCMM DCMM认证,又称为数据管理能力成熟度评估,依据 都是GB/T -《数据管理能力成熟度评估模型》,这是我国首个数据管理领域的国家标准,由国家质量监督检验检疫总局、国家标准化管理委员会于年3月15日正式发布。DCMM认证…...
Golang基于文件魔数判断文件类型
本文介绍基于魔数判断文件类型,涉及文件查找读取内容、文件魔数、字节比较,最后还介绍函数参数的知识。 查找位置 File.Seek()函数可以设置偏移位置,为下一次读或写确定偏移量,具体起点有whence确定:0标识相对文件开始…...
MySQL——索引视图练习题
学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名 Cno为主键 学生选课表:SC (Sno, Cno, Score)…...
哈希表题目:矩阵置零
文章目录题目标题和出处难度题目描述要求示例数据范围进阶解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析解法三思路和算法代码复杂度分析题目 标题和出处 标题:矩阵置零 出处:73. 矩阵置零 难度 3 级 题目描述 要求 给定一个 m…...
HTTP API自动化测试从手工到平台的演变
不管是 Web 系统,还是移动 APP,前后端逻辑的分离设计已经是常态化,相互之间通过 API 调用进行数据交互。在基于 API 约定的开发模式下,如何加速请求 / 响应的 API 测试,让研发人员及早参与到调试中来呢?既然…...
【从零开始学C语言】知识总结一:C语言的基本知识汇总
C语言期末知识点总结 C语言期末试题(附答案)选择题编程题 2022C语言知识点大全【详细、必备】 C语言期末大作业-学生成绩管理系统(完整源码设计报告) C语言期末作业(15个)-货物管理系统、歌曲信息管理系…...
CAD二次开发 添加按钮Ribbon
这篇文章是教大家怎样子创建自己的Ribbon按钮界面(如下图),以下示例代码在CAD2020中运行实现。 背景 创建一个属于自己的Ribbon按钮(如下图) 理解Ribbon、Panel、Tab的关系(如下图)ÿ…...
[RK3568 Android12] 添加自定义启动脚本
1:定义添加的脚本 比如为displayn2k.sh #!/system/bin/sh log "displayn2k.sh begin running" sleep 5 log "displayn2k.sh sleep 8" sleep 5 log "================sleep finished==========================" #remount /system/bin/mount -o …...
API 体系构建
前言 API 是模块或者子系统之间交互的接口定义。好的系统架构离不开好的 API 设计,而一个设计不够完善的 API 则注定会导致系统的后续发展和维护非常困难。在关键环节制定明确的 API 规范有助于 Service 对内提高产品间互通的效率,对外提供一致的使用体…...
RMPE: Regional Multi-Person Pose Estimation (AlphaPose)阅读笔记
区域多人姿态估计 ICCV 2017 论文链接 代码链接 摘要: 野外多人姿态估计具有挑战性。sota人体检测器不可避免存在定位和识别误差,这些误差可能导致依赖人体检测器的单人姿态估计器(SPPE)的失败。本文提出了一种新的区域多人姿态估…...
2月16日昆明面试经历部分考题
2月16日昆明面试部分考题 1.说说em和rem的区别?rpx呢? rem是相对于根元素(HTML)进行计算,而em是相对于当前元素或父元素的字体大小,如果当前文本的字体尺寸没有设置,则相对于浏览器的默认字体…...
ARC140D One to One
ARC140D One to One 题目大意 对于一个长度为nnn的整数序列X(x1,x2,…xn)X(x_1,x_2,\dots x_n)X(x1,x2,…xn),每个元素都在111到nnn之间,令f(X)f(X)f(X)表示以下问题的答案: 有一个nnn个顶点nnn条边的无向图(可能有重边和…...
联合身份验证与Cognito
Hello大家好,我们接下来讨论AWS联合身份验证的内容。 AWS联合身份验证 对于考试,联合身份验证部分是一块非常重要的内容。那什么是联合身份验证,它是做什么用的呢? 联合身份验证,是用来允许AWS外部用户,如…...
Nacos集群启动时,那个神秘的cluster.conf文件到底是怎么被找到和监控的?
Nacos集群启动时cluster.conf文件的寻址与监控机制深度解析 从一次集群配置失效事件说起 上周深夜,我们的分布式系统监控平台突然发出警报——Nacos集群中的三个节点相继失联。紧急排查时发现,明明已经更新了cluster.conf文件新增了两个节点,…...
【SpringBoot 】dynamic 动态数据源配置连接池(转)
前言 在复杂的业务场景中,我们经常需要使用多数据源来满足不同的数据访问需求。Dynamic Datasource 为我们提供了一种灵活切换不同数据源的解决方案。但是多数据源配置连接池 以及说明文档都是收费的。 本篇博文将详细介绍如何配置和优化 Dynamic Datasource 的连接…...
3步打造Windows字体终极体验:MacType高清渲染全攻略
3步打造Windows字体终极体验:MacType高清渲染全攻略 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 一、视觉痛点全解析:谁在忍受模糊字体的煎熬? 设计师的色彩…...
告别卡顿闪烁!在Cesium 1.134中集成SOG格式,让400万高斯秒级加载
突破性能瓶颈:Cesium 1.134集成SOG格式实现400万高斯秒级渲染 在三维地理空间可视化领域,Cesium一直是开发者构建高精度场景的首选引擎。但当项目涉及数百万级高斯泼溅数据时,传统加载方式往往导致令人崩溃的卡顿和视角移动时的闪烁问题。最近…...
Anomalib Padim模型训练完整踩坑记录:从环境配置、自制数据集准备到ONNX导出一步到位
Anomalib Padim模型实战:工业缺陷检测从零到ONNX部署全指南 工业质检领域正经历一场从传统人工检测到智能算法驱动的变革。想象一下,当生产线上的金属部件以每分钟数十个的速度通过摄像头时,如何确保每个产品表面没有细微划痕、凹陷或腐蚀&am…...
别再折腾虚拟机了!用Docker 5分钟搞定Oracle 10g测试环境(附阿里云镜像源)
5分钟极速部署Oracle 10g:Docker化开发环境实战指南 每次需要搭建Oracle测试环境时,你是否也经历过这样的痛苦?下载几个GB的安装包、配置复杂的系统参数、等待漫长的安装过程,最后可能还会遇到各种依赖问题。作为一名长期与Oracle…...
MAX17332 Arduino库详解:单节锂电池燃料计量与独立充电控制
1. 项目概述 MAX17332 是 Maxim Integrated(现为 Analog Devices)推出的一款高度集成的单节锂离子/锂聚合物电池管理芯片,专为紧凑型便携设备设计。它并非传统意义上的“纯BMS”(Battery Management System)࿰…...
QT实战:qcustomplot中setData与addData性能对比与最佳实践(附代码示例)
QT实战:qcustomplot中setData与addData性能对比与最佳实践(附代码示例) 在数据可视化领域,QT的qcustomplot库因其轻量级和高度可定制性而广受欢迎。然而,当处理大规模数据集或实时数据流时,开发者常常会遇到…...
RPA工程化实践:三种核心设计模式让复杂流程优雅可控
一、为什么RPA需要设计模式? 在回答这个问题前,我们先看一个典型的复杂RPA场景:企业财务自动化需要从多个系统获取数据(ERP、CRM、银行),经过清洗、验证、转换,然后生成报表并上传至OA系统&…...
实战驱动:告诉快马你的vue项目类型,获取量身定制的环境与示例
最近在做一个Vue 3移动端H5项目时,发现环境配置和基础搭建特别耗时。经过几次实践,我总结出了一套高效的项目初始化方法,今天就来分享这个实战经验。 项目初始化与移动端适配 使用Vue CLI创建项目后,首先要解决的就是移动端适配问…...
