执指之剑 一针见血(指针初识)

简介: 执指之剑 一针见血(指针初识)

1.什么叫指针


     C语言中,每创建一个值(数据),都会在内存中开辟出一定的空间,并且每个空间都有指定的名字,这个名字在C语言中叫做地址,也就是指针,类似宿舍的门牌号,通过门牌号来找到相应的房间,就像通过指针找到对应的值。


我们只要记住指针就是地址,地址就是指针,没什么可怕的,不要认为指针很高级,就是我们理解的地址,只不过在C语言中我们要学会如何去使用它。


2.定义指针变量


定义一个指针变量需要用到解引用操作符 * ,例如:

int* 表示整型指针类型;

char* 表示字符型指针类型;

这些类型加上 * 就变成指针类型了;

例如:



&是取地址符号,&a表示取出a的地址


p是一个指针变量,里面放的是a的地址,int* 表示p 是一个指针,指向一个int 类型的变量,那么p的类型就是 int*,我们也可以用解引用操作符 * 改变a的值,


例如:



可以看到a的值变成了10, *p表示通过p中的地址找到对应的空间,可以使用或者改变它,*p就等价于a,可以用*p改变a的值。


用*p修改a的值可以不受const的影响,尽管这样不太合理,会出现警告,不建议这样用。


3.指针变量类型


3.1指针加减整数


我们知道常见的指针类型:int*,char*,float* 等等,

指针类型确定了指针加减一个整数跳过多少字节


例如:



p1+1跳过4个字节,p2+1跳过1个字节,这就是指针变量的类型差异带来的变化

指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。


3.2指针减指针


指针减去指针的绝对值表示两个地址之间相差的元素个数

例如:



这是模拟strlen函数计算字符串的长度,可以看到字符串的长度是3,


3.3指针变量的大小


指针变量里面储存的是指针,也就是地址,那么地址的大小是怎么计算的呢?



可以看到,虽然指针类型不同,但是大小是一样的呀,我们要知道指针的大小取决于环境的不同


32位平台下地址是32个bit位(即4个字节)

64位平台下地址是64个bit位(即8个字节)

就像我们的宿舍号,308是个四人间,207是个六人间,大小不一样,但是门牌号都是三位数呀,


3.4 void*指针


void*指针是一种特殊类型的指针,它可以接收任意类型的指针,但是不能指针加减和解引用作,他就

像一个垃圾桶,什么都可以往里放,但使用它的时候就要进行强制转换成我们需要的类型。


void*的作用是使⽤在函数参数的部分,⽤来接收不同类型数据的地址,这样的设计可以 实现泛型编程的效果,使得⼀个函数来处理多种类型的数据,这个我们后面会讲到。


4.const修饰指针


下面来看一段代码:



用const修饰一个整型n,那么就不能再更改 n的值了,虽然n是一个变量,但是const修饰后,由于语法限制,就不能在修改n的值了,这就是const的作用,


要是用const修饰指针呢



可以合理地使用const来避免一些值发生变化。

 

5.野指针


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


5.1野指针的成因


1.定义指针时未初始化



2.指针越界访问



3.指针指向的空间被释放



这个p指向的空间已经被释放了,p找不到n的位置了,这种情况是非常危险的,

5.2如何避免野指针


1.指针初始化

2.⼩⼼指针越界

3.指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性


牢记这三条准则,避免出现野指针。

相关文章
|
5天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1481 0
|
5天前
|
人工智能 自然语言处理 安全
阿里云AI数智鉴密:AI 生成内容如何拿到一张"防篡改的身份证"
隐形水印 + C2PA签名:让AI生成内容“持证上岗”。
1128 0
|
14天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
3776 4
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
5天前
|
人工智能 安全 前端开发
刚刚 GPT-6 Astra 发布,全球最强,AGI 时代到来!
OpenAI 正式推出 GPT-6 Astra 模型,带大家看看这次 GPT 有哪些提升,跟 Claude Fable 5.1 有什么差距?AI 编程能力如何?AGI 真的来了么?
633 0
|
2天前
|
SQL 人工智能 前端开发
QoderWake 1.0 正式发布:从桌面里的 Agent,到工作现场的数字员工
QoderWake v1.0正式发布:企业级数字员工团队平台。支持“一句话建岗”,预置10类特训岗位;Waker常驻钉钉/飞书群,@即响应、自动协作、跨任务记忆;具备定时/事件/API多触发方式与统一任务看板;已沉淀27.6万条记忆、12.3万项技能,助力组织实现人机协同增效。
607 0
|
6天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)