[C语言] 指针
1. 指针是什么2. 指针和指针类型3. 野指针4. 指针运算5. 指针和数组6. 二级指针7. 指针数组
目录
1. 指针是什么?
2. 指针和指针类型
2.1 指针+-整数
2.2 指针的解引用
3. 野指针
3.1 野指针成因
3.2 如何规避野指针
4. 指针运算
4.1 指针+-整数
4.2 指针-指针
5. 指针和数组
6. 二级指针
7. 指针数组
1. 指针是什么?
#include <stdio.h>
int main()
{
int a = 10;//在内存中开辟一块空间
int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。//a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量
中,p就是一个之指针变量。
return 0;
}
00000000 00000000 00000000 0000000000000000 00000000 00000000 00000001...11111111 11111111 11111111 11111111
2. 指针和指针类型
int num = 10;
p = # 要将&num(num的地址)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的呢? 我们给指针变量相应的类型。
char * pc = NULL ;int * pi = NULL ;short * ps = NULL ;long * pl = NULL ;float * pf = NULL ;double * pd = NULL ;
2.1 指针+-整数
#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;
}
2.2 指针的解引用
//演示实例
#include <stdio.h>
int main()
{
int n = 0x11223344;
char *pc = (char *)&n;
int *pi = &n;
*pc = 0; //重点在调试的过程中观察内存的变化。
*pi = 0; //重点在调试的过程中观察内存的变化。
return 0;
} 总结:
3. 野指针
3.1 野指针成因
#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 ;}
3.2 如何规避野指针
#include <stdio.h>int main (){int * p = NULL ;//....int a = 10 ;p = & a ;if ( p != NULL ){* p = 20 ;}return 0 ;}
4. 指针运算
4.1 指针+-整数
#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指针+-整数;指针的关系运算
for (vp = &values[0]; vp < &values[N_VALUES];)
{*vp++ = 0;
} 4.2 指针-指针
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 - 1 ]; vp >= & values [ 0 ]; vp -- ){* vp = 0 ;}
5. 指针和数组
#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;
} 运行结果:

所以 p+i 其实计算的是数组 arr 下标为i的地址。
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int *p = arr; //指针存放数组首元素的地址
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i<sz; i++)
{
printf("%d ", *(p + i));
}
return 0;
} 6. 二级指针
int b = 20 ;* ppa = & b ; // 等价于 pa = &b;
** ppa = 30 ;// 等价于 *pa = 30;// 等价于 a = 30;
7. 指针数组
int arr1 [ 5 ];char arr2 [ 6 ];
那指针数组是怎样的?
int* arr3 [ 5 ]; // 是什么?

相关文章:
[C语言] 指针
1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 目录 1. 指针是什么? 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针…...
win10在vmware15中安装macos10.13系统
第一步、安装vmware版本信息如下 第二步、下载unlocker-main和darwin.iso放到安装文件夹 第三步、管理员身份运行win-install.cmd 第四步、运行vmware新建虚拟机 第五步、启动新创建的虚拟机macOS 10.13并选择语言 第六步、选择磁盘工具抹掉磁盘 第七步、格式化完成后退出磁盘工…...
Node.js:实现遍历文件夹下所有文件
Node.js:实现遍历文件夹 代码如下 const fs require(fs) const path require(path)function traverseFolder(folderPath) {// 读取文件夹列表const files fs.readdirSync(folderPath)// 遍历文件夹列表files.forEach(function (fileName) {// 拼接当前文件路径…...
Git详解及使用
Git简介 Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具。 大概是大二的时候开始接触和使用Gi…...
Jmeter设置中文的两种方式,建议使用第二种
方案一 进入jmeter图像化界面,选择Options下的Choose Language,再选择Chinese(Simplified)。这个就是选择语言为简体中文(缺陷:这个只是在本次使用时为中文,下次打开默认还是英文的) 方案二(…...
【ARM 嵌入式 编译系列 7.1 -- GCC 链接脚本中节区及各个段的详细介绍】
文章目录 什么是Section(节区)输入文件常见节区有哪些?什么是 glue code?.glue_7和.glue_7的作用是什么?链接脚本中的 KEEP 关键字是什么呢作用?链接脚本中的 PROVIDE 关键字是什么呢作用? 上篇文章:ARM 嵌…...
一文读懂HTML
文章目录 HTML的历史HTML的作用HTML的基本语言 HTML的历史 HTML(HyperText Markup Language)的历史可以追溯到20世纪90年代早期,它是互联网发展的重要里程碑之一。以下是HTML的历史概述: 早期阶段(1980年代末 - 1990年…...
MOCK测试
介绍 mock:就是对于一些难以构造的对象,使用虚拟的技术来实现测试的过程。 mock测试:在测试过程中,对于某些不容易构造或者不容易获取的对象,可以用一个虚拟的对象来代替的测试方 法。 接口Mock测试:在接口…...
Flutter源码分析笔记:Widget类源码分析
Flutter源码分析笔记 Widget类源码分析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132259681 【介绍】&#x…...
PyTorch 微调终极指南:第 2 部分 — 提高模型准确性
一、说明 如今,在训练深度学习模型时,通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型,我们可以利用他们的专业知识并使其适应我们的特定任务,从而节省宝贵的时间和计算资源。本文分为四个部分&…...
MySQL数据库----------安装anaconda---------python与数据库的链接
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
nuxt页面布局
nuxt页面默认布局文件在layouts目录下default.vue,可将页面的头部和脚部提取出来,形成布局页,将主内容区域的内容替换成<nuxt />。附default.vue代码: <template><div class"app-container"><div…...
mac编译ffmpeg
- code: git clone https://git.ffmpeg.org/gitweb/ffmpeg.git - 编译安装 https://trac.ffmpeg.org/wiki/CompilationGuide - 使用homebrew安装dependency brew install automake fdk-aac git lame libass libtool libvorbis libvpx \ opus sdl shtool texi2ht…...
如何让你的图片服务也有类似OSS的图片处理功能
原文链接 前言 有自己机房的公司一般都有一套存储系统用于存储公司的图片、视频、音频、文件等数据,常见的存储系统有以NAS、FASTDFS为代表的传统文件存储,和以Minio为代表的对象存储系统,随着云服务的兴起很多公司逐渐将数据迁移到以阿里云…...
Oracle PL/SQL 类型(Type):索引表、嵌套表、变长数组、pipelined 管道
1、Oracle 新建员工表和部门表.sql。 集合类型 1、Oracle 集合是相同类型元素的组合,在集合中,使用唯一的下标来标识其中的每个元素,与 Java 的 List 很像。 2、常用集合方式: 类型语法下标元素个数初始值.extend能否存在DB中…...
Web 服务器 -【Tomcat】的简单学习
Tomcat1 简介1.1 什么是Web服务器 2 基本使用2.1 下载2.2 安装2.3 卸载2.4 启动2.5 关闭2.6 配置2.7 部署 3 Maven创建Web项目3.1 Web项目结构3.2 创建Maven Web项目 4 IDEA使用Tomcat4.1 集成本地Tomcat4.2 Tomcat Maven插件 Tomcat 1 简介 1.1 什么是Web服务器 Web服务器是…...
armbian使用1panel快速部署部署springBoot项目后端
文章目录 前言环境准备实现步骤第一步:Armbian安装1panel第二步:安装数据库第三步:查看数据库容器重要信息【重要】查看容器所在的网络查看容器连接地址 第四步:项目配置和打包第五步:构建项目镜像 前言 这里只是简单记录部署spr…...
Streamlit 讲解专栏(八):图像、音频与视频魔法
文章目录 1 前言2 st.image:嵌入图像内容2.1 图像展示与描述2.2 调整图像尺寸2.3 使用本地文件或URL 3 st.audio:嵌入音频内容3.1 播放音频文件3.2 生成音频数据播放 4 st.video:嵌入视频内容4.1 播放视频文件4.2 嵌入在线视频 5 结语&#x…...
python使用装饰器记录方法耗时
思路 python使用修饰器记录方法耗时,目的是每当方法执行完后,可以记录该方法耗时,而不需要在每个方法的执行前后,去创建一个临时变量,来记录耗时。 方式一(不推荐): 在每个方法的…...
JavaWeb课程学习--Day01
HTML 建立css文件: css使用方式: <span>...</span>无语意包裹标签 css中的三种选择器: 注意:播放视音频时要留出播放空间 盒子模型: 表格标签: 以上表格: 表单标签: 表…...
手把手教你用Silvaco TCAD仿真SiC MOSFET:从工艺步骤到参数提取的保姆级指南
手把手教你用Silvaco TCAD仿真SiC MOSFET:从工艺步骤到参数提取的保姆级指南 在功率半导体领域,碳化硅(SiC)MOSFET凭借其优异的材料特性正逐步取代传统硅基器件。对于工程师和研究人员而言,掌握TCAD仿真工具已成为理解…...
AI赋能传统行业:Lingbot深度估计在工业质检中的落地案例
AI赋能传统行业:Lingbot深度估计在工业质检中的落地案例 在传统的工业质检线上,质检员们常常需要面对一个棘手的难题:如何准确判断一个零件表面是否存在肉眼难以察觉的凹陷或凸起?传统的2D视觉检测系统,拍出来的照片再…...
鲲鹏麒麟服务器离线安装MySQL5.7全流程(含密码修改与远程访问配置)
鲲鹏麒麟服务器离线安装MySQL5.7全流程指南 在国产化技术快速发展的背景下,基于鲲鹏920处理器的麒麟服务器正逐渐成为企业级应用的新选择。这类服务器通常运行Kylin Linux Advanced Server V10操作系统,专为高性能计算和安全敏感场景设计。由于安全合规要…...
【AIAgent记忆可靠性白皮书】:IEEE标准级记忆校验协议、CRDT同步算法落地实践,及3类高危记忆漂移预警阈值
第一章:AIAgent架构中的记忆机制设计 2026奇点智能技术大会(https://ml-summit.org) AI Agent 的长期有效性高度依赖其记忆机制——它不仅是信息暂存的“缓存区”,更是支撑推理连贯性、上下文感知与个性化行为演化的认知基座。现代 AIAgent 架构中&…...
用Python的正态分布模拟一个生活场景:产品质量检验与评分分布预测
用Python模拟零件质量检验:正态分布在工业场景的实战应用 去年接手某汽车零部件供应商的质量优化项目时,生产线主管抛给我一个具体问题:"我们每天抽检200个轴承直径,但合格率波动很大,能否用数据预测次品风险&…...
2026年大模型技术前瞻:Qwen2.5长上下文支持推动行业变革入门必看
2026年大模型技术前瞻:Qwen2.5长上下文支持推动行业变革入门必看 本文深入解析Qwen2.5-0.5B-Instruct的核心能力,重点探讨长上下文支持如何改变AI应用格局,为开发者提供实用入门指南。 1. Qwen2.5-0.5B-Instruct:小而精的AI新星 …...
网盘下载太慢?这款直链助手让你告别龟速时代
网盘下载太慢?这款直链助手让你告别龟速时代 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...
如何永久保存微信聊天记录?WeChatMsg完整指南让记忆永不丢失
如何永久保存微信聊天记录?WeChatMsg完整指南让记忆永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...
QZoneExport:一键永久保存你的QQ空间数字记忆
QZoneExport:一键永久保存你的QQ空间数字记忆 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https://gitcode…...
Stable Yogi Leather-Dress-Collection 模型蒸馏与轻量化部署探索
Stable Yogi Leather-Dress-Collection 模型蒸馏与轻量化部署探索 想不想在手机或者树莓派这样的小设备上,也能跑起来 Stable Yogi 这样的图片生成模型,让它为你设计皮革裙装?这听起来有点天方夜谭,毕竟这类模型动辄几十GB&#…...
