C语言指针深入 I 学习总结

发布时间:2026/7/23 3:40:09

C语言指针深入 I 学习总结
目录1.const修饰指针2.野指针3.assert断言4.传值调用和传址调用一.const修饰指针例1.const修饰局部变量aa不能够被赋值const修饰局部变量aa 是常变量本质依旧是变量拥有内存空间但是通过变量名 a 不能直接修改里面的值。a 100;尝试直接对 const 常变量赋值。//const int main() { const int a 10;//被const修饰后变成了一个常变量 -具有常属性的变量不能被修改了骨子里还是一个变量 a 100; printf(%d\n, a); return 0; }代码运行结果解说试图修改只读变量a程序无法生成可执行文件跑不起来。例2数组大小里要存放常数不能使用常变量接下来让我们了解两个概念常量与长变量解释常量编译期就确定的值常变量const int n运行时才有内存不属于编译常量int main() { //const修饰变量时不是常量是一个变量 const int n 10;//c99之前这个n不能放在数组的大小指定的位置 int arr[n]; arr[0] 1; return 0; }代码运行结果解说数组长度必须是编译期常量n是常变量编译报错。例3.const 只禁止直接修改变量名没有锁死内存借助指针获取地址可以间接修改局部 const 变量里面的值。int main() { //打破const常变量 const int a 10; int* p a; *p 100; printf(%d\n, a);//输出的是100不是10就好比你进一个房子里有门可以进也有窗户可以进当使用const修饰变量后就相当于把门锁了只能从窗户进去 return 0; }代码运行结果解说不能直接修改 const 修饰的 a但借助指针可以绕开限制间接修改 a 存储的数据这种方式不一定在所有环境都能用。例4.const修饰指针变量1. 放在*的左边const修饰的指针变量指向的内容不能通过指针变量修改它指向的内容但是指针变量的指向是可以修改的2.放在*的右边const修饰的指针变量本身指针变量的指向是不能修改的但是指针指向的内容是可以通过指针来改变int main() { int n 10; const int* p n;// 指向常量的指针*p只读p可以换指向 int m 100; p m;// p里面的值被覆盖成(内存B的地址)p现在指向m printf(%d\n, n);//10 return 0; }int main() { int n 10; int* const p n;// p存放n的地址p从此以后不能再指向别的变量 *p 100;// *p等价于n修改n内存里的值 printf(%d\n, n);//100 return 0; }二.野指针就是指针指向的位置是不可知的随机的不正确的没有明确限制的.造成野指针的有三种情况1.指针未初始化2.指针访问越界3.指针指向的空间释放例5.列举局部变量与全局变量未初始化代码会怎样运行。//全局变量不主动初始化的情况下编译器默认会给初始化0 int g_val; int main() { //局部变量不初始化里边的值是不可预测的可能是随机值如果在初始化前加上static编译器默认会给初始化0 //int n; //printf(%d\n, n);//编译失败 static int n; printf(%d\n, n);//如果没有加static将编译失败加static输出0 printf(%d\n, g_val);//0 return 0; }代码运行结果解说全局变量不加初始化程序加载时默认初始化为 0被 static 修饰的局部静态变量同样默认初始化为 0普通局部变量不初始化里面存放随机垃圾值。例6.指针未初始化//1.指针未初始化 int main() { //int n 10; //int* p n;//指针初始化 int* p; *p 10;//p就是野指针 return 0; }例7.指针越界访问//2.指针越界访问 int main() { int arr[10] { 0 }; int* p arr[0]; int i 0; for (i 0;i 11;i) { *(p) i;//先执行*p,在执行 } return 0; }例8.指针指向的空间释放//3.指针指向的空间释放 int* test() { int n 100; return n; } int main() { int* p test(); printf(%d\n, *p);//*p为野指针 return 0; } int main() { int n 10; int* p n; int* p1 NULL; //NULL专门用来初始化指针变量chushihuaweiNULl的指针变量意味着这个指针没有可以指向有效空间的地址我们暂时不能使用它 return 0; }三.assert断言assert(条件)断言宏。条件为真程序正常运行条件为假程序直接崩溃打印出错文件、行号。#define NDEBUG必须写在#include assert.h前面开启后所有 assert 全部失效。例9//#define NDEBUG #include assert.h //assert断言 int main() { //int* p NULL; int n 10; //int* p n; int* p NULL; assert(p ! NULL); printf(%d\n, *p); return 0; } //strlen #include assert.h size_t my_strlen(const char *p) { int count 0; assert(*p ! NULL); while (*p ! NULL) { count; p; } return count; } int main() { char arr[] abcdef; size_t len my_strlen(arr); printf(%zu\n, len); return 0; }四.传值调用和传址调用例10//传值调用 //实参传递给形参的时候形参是实参的一份临时拷贝 //对形参的修改不影响实参 void swap(int x, int y) { int z x; x y; y z; } int main() { int a 0; int b 0; scanf(%d %d, a,b); printf(交换前a %d b %d\n, a, b); swap(a, b); printf(交换后a %d b %d\n, a, b); return 0; }例11//传址调用 void swap(int *x, int *y) { int tmp *x; *x *y; *y tmp; } int main() { int a 0; int b 0; scanf(%d %d, a, b); printf(交换前a %d b %d\n, a, b); swap(a, b); printf(交换后a %d b %d\n, a, b); return 0; }

相关新闻

支付风控的“AlphaGo时刻 ——Data Agent驱动的三层AI风控架构

支付风控的“AlphaGo时刻 ——Data Agent驱动的三层AI风控架构

2026/7/23 3:40:09

01|规则写到400 条时,我开始怀疑这条路本身 我是上海富友支付服务股份有限公司的技术负责人。富友是一家科技驱动型的支付公司,先后获得由中国人民银行颁发的多项支付业务资质,也是上海市高新技术企业、上海市重点软件企业、上海…

PDF表格数据提取:Camelot与Tabula实战指南

PDF表格数据提取:Camelot与Tabula实战指南

2026/7/23 3:40:09

1. 为什么我们需要专业PDF表格提取工具在处理PDF文档时,最令人头疼的莫过于需要从中提取表格数据。我曾参与过一个金融数据分析项目,客户提供了300多份PDF格式的季度报表,每份包含5-6个关键数据表。最初尝试手动复制粘贴,不仅效率…

Google早期技术决策与工程师文化:从搜索基础设施到规模化实践

Google早期技术决策与工程师文化:从搜索基础设施到规模化实践

2026/7/23 3:40:09

这次我们来看一个特殊的项目——不是技术工具,而是一段珍贵的历史记录。一位前 Google 员工回忆了公司在 2000 年代初期的创业氛围、技术文化和工作日常。对于今天想了解硅谷技术公司早期发展、工程师文化形成,或者单纯对 Google 成长史感兴趣的读者&…

C++格式化输出全解析:从printf到iostream,打造专业数据展示

C++格式化输出全解析:从printf到iostream,打造专业数据展示

2026/7/23 4:30:12

1. 项目概述:为什么C格式化输出值得深究?在C的日常开发中,尤其是调试、日志记录、数据展示或者开发命令行工具时,我们几乎无时无刻不在和输出打交道。很多初学者,甚至一些有经验的开发者,往往满足于用std::…

为什么你的AI图片总被客户拒稿?揭秘商业摄影效果的4个硬性指标(分辨率/光影逻辑/材质真实度/品牌一致性)

为什么你的AI图片总被客户拒稿?揭秘商业摄影效果的4个硬性指标(分辨率/光影逻辑/材质真实度/品牌一致性)

2026/7/23 4:30:12

更多请点击: https://intelliparadigm.com 第一章:为什么你的AI图片总被客户拒稿? AI生成图像正迅速融入商业设计流程,但大量设计师反馈:客户反复拒稿,理由模糊如“不够真实”“风格不统一”“细节失真”。…

防火墙保护服务器

防火墙保护服务器

2026/7/23 4:30:12

DOS攻击 DOS攻击介绍: Dos攻击:是一种拒绝服务攻击,常用来使服务器或者网络瘫痪(一对一) DDos攻击:分布式拒绝服务攻击(群殴) DOS攻击目的: 1、消耗带宽 2、消耗服务器性…

AI模型选型与优化:核心痛点与实战指南

AI模型选型与优化:核心痛点与实战指南

2026/7/23 4:30:12

1. AI模型选型的核心痛点解析"AI选不对,调试全白费"这句话在业内流传已久,我从业十年间见过太多团队在模型调试环节投入80%精力,最终效果却不如换用合适的基础模型。2023年某电商推荐系统案例中,某团队耗时三个月优化XG…

基于Qt与C++从零构建HTTP代理服务器:原理、实现与实战

基于Qt与C++从零构建HTTP代理服务器:原理、实现与实战

2026/7/23 4:30:11

1. 项目概述:为什么我们需要自己动手写一个HTTP代理服务器? 最近在调试一个网络应用时,我遇到了一个典型的“502 Bad Gateway”错误。这个错误提示指向了一个本地代理端口,让我意识到,很多开发者和测试人员其实每天都在…

基于LLM的自然语言到结构化查询框架设计与实践

基于LLM的自然语言到结构化查询框架设计与实践

2026/7/23 4:20:11

这次我们来看一个专门解决自然语言访问领域特定元数据问题的框架项目。这个框架的核心价值在于提供了一套可复用的方法论,让开发者能够快速构建基于大语言模型的查询生成系统,将自然语言问题自动转换为结构化查询。对于需要处理复杂元数据查询的场景&…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/23 3:40:08

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/21 9:56:14

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

2026/7/23 0:09:56

更多请点击: https://kaifayun.com 第一章:企业级AI搜索落地选型实战手册(含LLMRAGHybrid架构对比矩阵与ROI测算模板) 企业级AI搜索系统落地成败,核心在于技术选型与业务价值的精准对齐。盲目堆砌大模型能力或过度依赖…

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

2026/7/23 0:09:56

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于ARM Cortex-M内核的微控制器项目中,深入理解并熟练配置芯片的片上外设,是从“点亮LED”迈向“实现复杂系统功能”的关键一步。Tiva™ TM4C129LNCZAD作为TI公司Cortex-M4F家族中的高性能成员…

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

2026/7/23 0:09:56

一、快速声明与争议背景本文是对 AtomCode 终端 spinner 时长显示 fmt_dur 相关说法的事实性核验。2026 年 7 月 CSDN 上出现两篇互相矛盾的博文,近期又有 AI 在对话中输出格式描述 XhYm / YmZs / Zs。本文基于 AtomCode 仓库 main4677ddfa 及全分支 Git 历史给出可…