当前位置: 首页 > 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.dtcms.com/a/192986.html

相关文章:

  • nn.Module 与 nn.functional
  • Hashmap 和 map的区别
  • 单片机开发软件
  • mysql数据库-3 (主从复制)
  • Windows AD 域客户端电脑时间不准解决方案
  • 卷积神经网络和深度神经网络的区别是什么?
  • 地球阿米特黑客组织使用新型工具攻击军用无人机供应链
  • 常见三维引擎坐标轴 webgl threejs cesium blender unity ue 左手坐标系、右手坐标系、坐标轴方向
  • TypeScript:类
  • 达利欧:“交易的艺术”与“背后的力量”
  • 了解光学影像
  • C#自定义控件-实现了一个支持平移、缩放、双击重置的图像显示控件
  • OpenCV人脸识别EigenFace算法、案例解析
  • MySQL 开发的智能助手:通义灵码在 IntelliJ IDEA 中的应用
  • 自营交易考试为何出圈?一场模拟交易背后的真实竞争
  • 为什么elasticsearch配置文件JVM配置31G最佳
  • 世界模型+大模型+自动驾驶 论文小汇总
  • 数据结构(九)——排序
  • Xournal++:开源跨平台笔记软件,手写与创作的完美结合
  • SQL笔记一
  • 1267, “Illegal mix of collations (latin1_swedish_ci,IMPLICIT
  • Spring MVC 接口的访问方法如何设置
  • 主流快递查询API横向对比:快递100快递鸟菜鸟物流接口差异解析
  • 本地 PC 使用Offset Explorer连接实体Ubuntu Kafka 【单机】超时问题解决
  • 印度Rummy游戏支付通道申请策略:技巧类游戏的合规与创新
  • 5.19 BGP实验
  • 动态规划之数列
  • 免疫浸润分析
  • C语言-8.数组
  • Java大师成长计划之第23天:Spring生态与微服务架构之服务发现与注册中心