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

指针(3)

        C语言昂,指针昂,最喜欢的一集,小时候学这一课我直接取地址了。上一篇博客给大家讲解了不同类型的指针变量的大小,今天来给大家讲解一下根据其所产生的一些性质。(往期回顾:指针(2)-CSDN博客)

        根据上一篇博客的意思:既然不同类型的指针变量的大小都是一样的,那么为什么我们还要区分指针的类型呢?为什么不直接用一种通用类型的指针来涵盖所有的指针呢?这种想法其实我也有过,就像秦始皇统一度量衡一样,假如有个统一的指针类型,那么我们用(学)指针不也很方便易懂了吗?但经过后面的学习发现,事情没有想象得这么的简单,听我娓娓道来:

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int a = 10;int* p = &a;printf("%p\n", p);return 0;
}

        我们来看这个代码,我们将a初始化为10,然后用p这个指针来存储a的地址,然后我们打印出p来看看(其实打印的就是a的地址。)

        我们可以看到用inr来当作指针的类型,然后打印出的p是这样的,接下来我们将其+1

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int a = 10;int* p = &a;printf("%p\n", p );printf("%p\n", p+1);return 0;
}

        我们发现p的值(a的地址+了4个字节),而这4个字节就是int类型所占的空间,所以说我们推断在不同类型的指针进行计算的时候,运算的是它类型的大小,假如说int类型的指针进行+1运算,实际上是+了4个字节;但用double类型的指针进行+1,就会+8个字节……这是我们的猜想,让我们来用代码进行实现,验证一下这个猜想: 

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{double a = 10;double* p = &a;printf("%p\n", p);printf("%p\n", p+1);return 0;
}

 

        因为是16进制表示的地址,所以说我们对double指针+1 ,实际上是+了8个字节的;让我们来试试char类型呢?

        正好,char类型的指针+了1个字节,这和我们的猜想一样——这就说明了当我们对指针进行运算时,加减的是指针类型的大小。这也就侧面说明了为什么不能统一指针类型,当我们指针的运算有了一定的了解之后,我们可以为指针与数组的结合又埋下伏笔了。 

http://www.lryc.cn/news/264936.html

相关文章:

  • 外汇天眼:我碰到外汇投资骗局了吗?学会这5招,轻松识别外汇诈骗黑平台!
  • 一文解析子网掩码和默认网关,成为网络设置达人
  • 二分查找法详解(6种变形)
  • uniapp uview 页面多个select组件回显处理,默认选中
  • linux中playbook的控制语句
  • MongoDB介绍
  • 再看参数校验
  • 计算机存储术语: 扇区,磁盘块,页
  • 解决IDEA编译/启动报错:Abnormal build process termination
  • Jetpack DataStore
  • 在Portainer创建Nginx容器并部署Web静态站点实现公网访问
  • 泛微e-cology XmlRpcServlet文件读取漏洞复现
  • 当下流行的直播技术demo演示
  • Zabbix自动发现并注册已安装agent的主机
  • Jtti:linux搭建开源ldap服务器的方法
  • Gazebo GUI模型编辑器
  • pycharm运行正常,但命令行执行提示module不存在的多种解决方式
  • GBASE南大通用GBase 8a ODBC的安装文件
  • 重新配置torch1.8 cuda11.1 torchtext0.9.0虚拟Pytorch开发环境
  • 【动画图解】一次理清九大排序算法!面试官问到再也不慌!
  • 组播地址段及其作用
  • Vue+ElementUI前端添加展开收起搜索框按钮
  • 速盾网络:sdk游戏盾有什么作用?
  • 理解BeEF的架构
  • esp32-s3训练自己的数据进行目标检测、图像分类
  • 华为设备VRP基础
  • 论文笔记 | ICLR 2023 WikiWhy:回答和解释因果问题
  • LC24. 两两交换链表中的节点
  • 使用redis-rds-tools 工具分析redis rds文件
  • C# Onnx yolov8 plane detection