魔法指针 之 指针开篇

简介: 魔法指针 之 指针开篇

指针


概念

C语言中的地址 也形象化叫做 指针,通过它能找到以它为地址的内存单元

so

内存单元的编号 == 地址 == 指针

计算机常见单位转换

常见单位:PB TB GB MB KB byte bit

     由 大------------------>小

1个字节(byte)= 8 bit

1KB = 1024 byte  

1MB = 1024 KB

1GB = 1024 MB    

1TB = 1024 GB

1PB = 1024 TB

深入理解指针

注:地址是用%p来打印的(在vs中是以十六进制打印出来的)

请看代码:

在前面学过,“ & ”该符号叫取地址操作符

int main()
{
  int a = 10;
 
  printf("%d的地址为%p\n", a, &a);
  return 0;
}

%p打印出来的十六进制是随机的,取决于计算机

控制台输出

指针变量

一段代码解释清楚指针变量

int main()

{

   int a = 10;

   int* pa = &a; //取出a的地址

        //pa叫做指针变量,也叫做用来存放指针

   return 0;

}

一图 KO 理解指针类型

如上面代码👆

指针变量的大小  

请看代码

注意:%zd是打印类型的

在VS中:

在x64环境下为8byte  //64位平台

在x86环境下为4byte  //32位平台

int main()
{
  char* pc = NULL;
  int* pi = NULL;
 
  printf("%zd\n", sizeof(pc));
  printf("%zd\n", sizeof(pi));
 
  return 0;
}

结果会输出什么呢?

再看代码和结果

指针变量的大小和类型是⽆关的,

指针类型的变量,在相同的平台下,大小都是相同的。

实际上,这是vs控制的

我们再来看另一段代码

int main()
{
  int a = 10;
 
  int* pa = &a;
  char* pc = (char*)&a;
 
  printf("%p\n", pa);
  printf("%p\n", pc);
  printf("%p\n", pa+1);
  printf("%p\n", pc + 1);
 
  return 0;
}

看看结果输出

总结

  类型 字节(byte)
char* 1
short* 2
int* 4
float* 4
double* 8

解引用操作符(*)

请看代码:输出a的值是什么呢?

int main()
{
  int a = 6;
 
  int* pa = &a;
  *pa = 10;
 
  printf("%d\n", a);
  return 0;
}

代码解释

const修饰指针

const修饰变量

const修饰指针变量

const放在*左边  vs const放在*右边

const放在*两边


野指针


概念

野指针就是指针指向的位置是不可知的,野指针简称(野狗);

特点

随机的,不确定的,没有明确限制的

最常遇见野指针

指针未初始化

局部变量指针未初始化,默认为随机值

int main()
{
  int *pta;
  *pta = 10;//err
  printf("%d\n", pta);
  return 0;
}

指针越界访问

指针指向的范围超过了数组的范围,越界访问

int main()
{
  int arr[5] = { 0 };
  int* p = &arr[0];
  int i = 0;
  for (i = 0; i < 10; i++)
  {
    *p = 1;
    p++;
  }
  return 0;
}

指针指向的空间释放

举个栗子:

有三个人物:员工A,boss,宾馆,房卡682

boss预定了宾馆,给了员工房卡,让他明天去入住,但在明天前boss退房了,而员工未收到通知,员工去入住了,但在核验时发现房卡用不了

int test()
{
  int a = 10;
  //...
  return &a;
}
 
int main()
{
  int* p = test();
  printf("%d\n", *p);
  return 0;
}
目录
相关文章
|
2月前
|
人工智能 测试技术 开发工具
新版Qoder CN AI编程智能体详解:RepoWiki、Quest2.0与专家团实战教程
在AI辅助开发持续迭代的当下,AI编程工具已经跳出简单代码片段生成的范畴,逐步进化为具备任务规划、多文件修改、自测修复、知识沉淀的编程智能体体系。新版Qoder CN作为面向完整软件研发链路的AI编程智能体平台,完成底层架构与核心能力的大规模升级,不再局限单文件代码补全,面向真实工程级项目打造完整Agent工作流,覆盖需求梳理、方案设计、编码实现、单元测试、缺陷修复、项目文档沉淀全流程。产品形态十分丰富,包含独立Qoder CN IDE、JetBrains系列插件、VSCode扩展组件、Qoder‑CLI命令行工具,同时兼容对接百炼平台Coding Plan、Token Plan订阅计费方案,
921 1
|
3月前
|
弹性计算 人工智能 Serverless
查文档太累?阿里云文档 MCP 工具帮你一站搞定
API MCP Server 现已正式集成阿里云帮助文档检索能力。通过 4 个文档工具——SearchDocuments、GetDocument、GetDocumentTree、GrepDocuments,Agent 可以在回答阿里云相关问题时实时检索最新官方文档。所有示例均基于真实工具调用结果整理,可直接复用。
|
6月前
|
人工智能 JSON 前端开发
前端组件库——Semi Design知识点大全(三)
教程来源 http://unbgv.cn Semi D2C是抖音前端自研的行业领先设计稿转代码工具,支持Figma一键生成语义化React代码(JSX+SCSS/Tailwind等),精准识别Semi组件及Props,无需标注、不改设计习惯,深度打通设计系统,3–5秒完成布局与样式还原。
|
4月前
|
运维 Java 测试技术
程序员必备的十大技能(进阶版)之性能调优与故障排查(四)
教程来源 https://aescc.cn/ 本节系统介绍Java应用性能分析与稳定性保障核心实践:涵盖Arthas诊断、火焰图性能剖析、全链路压测方法论及JMeter实战、混沌工程故障注入(ChaosBlade),并复盘Full GC与数据库死锁两大典型故障案例,助力高效定位与解决线上性能问题。
|
5月前
|
弹性计算 运维 测试技术
阿里云轻量应用服务器200M峰值带宽是什么意思?会不会产生网络丢包,与独享带宽有何区别?
2026年阿里云轻量应用服务器抢购活动升级,活动提供2核2G峰值200M带宽40G ESSD云盘38元1年、2核4G配置50G ESSD云盘9.9元1月及199元1年的优惠。200M为峰值带宽实际为共享资源,实际速率或因竞争降低,适合中小网站、开发测试等场景。
|
6月前
|
数据采集 人工智能 自然语言处理
2026年GEO优化是过去的SEO优化吗?有什么不一样呢?
2026年GEO(生成式引擎优化)非SEO替代,而是AI时代演进:面向ChatGPT、豆包等大模型,以结构化知识、语义适配与信源卡位,实现“被AI引用”而非“被用户点击”,重在抢占零点击决策入口。(239字)
|
JSON Linux 网络安全
Python 使用Python远程连接并操作InfluxDB数据库
Python 使用Python远程连接并操作InfluxDB数据库
867 1
|
存储 对象存储
阿里云快照有必要开通吗?收费吗?
阿里云快照有必要开通吗?收费吗?快照可用来备份和恢复云服务器数据,还是很有必要开通的,快照收费价格表如下:
阿里云快照有必要开通吗?收费吗?
|
缓存 监控 Cloud Native
阿里大规模业务混部下的全链路资源隔离技术演进
本文作为混部实践系列开篇,本篇文章将介绍资源隔离技术在混部中的重要性、其落地挑战及我们的应对思路。
阿里大规模业务混部下的全链路资源隔离技术演进
|
存储 算法 安全
【高阶数据结构】手撕红黑树(超详细版本)
【高阶数据结构】手撕红黑树(超详细版本)
1165 0
【高阶数据结构】手撕红黑树(超详细版本)