当前位置: 首页 > news >正文

C40-指针

一 指针的引入

  1. 什么是指针:指针是一个变量,其值是另一个变量的内存地址

  2. 简单的使用地址输出一个变量:

    • 代码示例

      #include <stdio.h>
      int main()
      {int a=10;printf("a的地址是:%p\n",&a);printf("a=%d\n",*(&a)); //*号是取值运算符return 0;
      }
      
    • 成果展示:

    image-20250515201409413

    • 报错与总结:无

二 指针变量的引入

  • 整型变量→存放整型数的变量
  • 字符变量→存放字符型数据的变量

由此,指针变量就是存放指针的变量,存放地址的变量

指针变量的声明:

int *ptr;	//声明一个指向int类型的变量ptr
double *dp;	//声明一个指向double类型的变量dp

需要强调的是:"*"在声明指针变量时作用是:表示声明指针变量;而在其它地方用于解引指针

示例:通过指针变量访问并输出一个变量

  • 代码示例:
#include <stdio.h>
int main()
{int a=10;int *p;p=&a;printf("a的地址是:%p\n",&a);printf("通过变量名访问a:%d\n",a);printf("通过地址访问a:%d\n",*(&a));printf("通过指针变量访问a:%d\n",*p);return 0;
}
  • 成果展示:

image-20250515212047760

  • 报错与总结:无

三 指针变量为什么要求类型

原因:

  • 内存访问:不同类型数据占内存空间不同,指针类型决定解引用时读取字节数,避免错误读写
  • 指针运算:指针运算偏移量与指向类型相关,类型不符则无法正确计算偏移

实验:对比正确与错误的指针类型的地址访问、数据访问、指针偏移

正确的

  • 代码示例:
#include <stdio.h>
int main()
{int a=0x1234;int *p=&a;puts("我们在这里测试指针的地址:");printf("p:%p\n",p);puts("\n我们在这里测试通过指针访问变量:");printf("来自p的测试:%x\n",*p);puts("\n我们在这里测试指针偏移:");printf("++p:%p\n",++p);return 0;
}
  • 成果展示:

image-20250515232504458

  • 报错与总结:

错误的

  • 代码示例:
#include <stdio.h>
int main()
{int a=0x1234;int *p=&a;char *c=&a;puts("我们在这里测试指针的地址:");printf("c:%p\n",c);puts("\n我们在这里测试通过指针访问变量:");printf("来自c的测试:%x\n",*c);puts("\n我们在这里测试指针偏移:");priintf("++c:%p\n",++c);return 0;
}
  • 成果展示:我们发现,指针类型不兼容从而导致报错

image-20250515232757484

  • 报错与总结:
http://www.xdnf.cn/news/465841.html

相关文章:

  • 在线文档管理系统 spring boot➕vue|源码+数据库+部署教程
  • 用vlookup函数根据基因名查找基因对应的CNV数据
  • Scratch作品 | 3D原野漫游
  • 班会内容模板
  • Obsidian Callouts标注框语法
  • 从卡顿到丝滑:JavaScript性能优化实战秘籍
  • 人大金仓数据库 与django结合
  • 【BotSharp详细介绍——一步步实现MCP+LLM的聊天问答实例】
  • 火山引擎发展方向
  • 虚拟网络编辑器
  • ArcGIS Pro地块图斑顺序编号(手绘线顺序快速编号)-004
  • InforSuite AS 可以发布django和vue项目是否可行
  • 机器学习笔记3
  • C++核心编程--3 函数提高
  • AAC 协议
  • 计量——异方差的检验及其修正
  • day26 Python 自定义函数
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- Manus解密
  • PPT处理控件Aspose.Slides教程:在 Java 中将 PPTX 转换为 EMF
  • Python控制Keysight DAQ973A/DAQ970A实现温度监测
  • .NET 8 kestrel 配置PEM,实现内网https
  • JavaScript - 运算符之逗号操作符与逗号分隔符(逗号操作符概述、逗号操作符用法、逗号分隔符、逗号分隔符用法)
  • 【C++重载操作符与转换】容器与继承
  • Excel函数使用介绍-分组求和SUMIF
  • 达利欧:“交易的艺术”与“背后的力量”
  • OpenCv高阶(4.0)——案例:海报的透视变换
  • 【杂谈】-AI 重塑体育营销:从内容管理到创意释放的全面变革
  • C#发送文件到蓝牙设备
  • 使用 `perf` 和火焰图(Flame Graph)进行性能分析
  • 25.5.15