C/C++基础----指针

指针的定义

  • 在c/c++中,有一个特殊的变量指向我们电脑中某个内存地址,进而可以让我们操作这段内存,指的就是指针类型

  • 语法:

    int a = 10;
    int* p = &a;
    
  • &符号是取出某个变量的内存地址

  • 把这个内存地址赋值给一个变量p,而接收我们内存地址的变量类型就为 类型* 指针类型

  • 因为a的类型为int,所以a的指针类型为int*

  • *p是取出该地址的值

    #include <iostream>using namespace std;int main() {int a = 10;int *p = &a;cout << "a的值:" << a << endl;cout << "a的内存地址:" << p << endl;cout << "取指针p内存地址的值:" << *p << endl;return 0;
    }
    

    在这里插入图片描述

  • 通过指针操作a的值

    // 通过*p修改a的值
    *p = 58;
    cout << "修改后的a的值:" << a << endl;
    

    在这里插入图片描述


指针数组

原生数组中的地址

  • 可以看到数组中元素的地址是连续的,因为int为四个字节,所以每次地址都加4

    #include <iostream>using namespace std;int main() {int a[] = {1, 2, 3, 4, 5};//	循环取址for (int &i: a) {cout << &i << endl;}return 0;
    }
    

    在这里插入图片描述

  • 直接打印数组的内存地址和数组内第一个元素的内存地址是一样的

    cout << "直接打印数组的地址:" << &a << endl;
    cout << "打印数组第一个元素的地址:" << &a[0] << endl;
    

    在这里插入图片描述

创建存放指针的数组

  • 语法:
    int* a[指针数组的大小];
    
  • 使用指针数组操作数组
    #include <iostream>using namespace std;int main() {int a[] = {1, 2, 3, 4, 5};int *p_a[5];for (int i = 0; i < 5; i++) {p_a[i] = &a[i];}for (int *i: p_a) {cout << i << endl;cout << *i << endl;}for (int *i: p_a) {*i = 1516;}cout << "=======" << endl;for (int *i: p_a) {cout << *i << endl;}return 0;
    }
    
    在这里插入图片描述

多级指针

  • 指针也是一个变量,变量都有地址,所以指针类型也有他的地址

  • 其实某个变量的指针就是把该变量十六进制的内存地址存放到了指针类型的变量里

  • 直接打印a变量的地址和打印a变量的指针内容是一样的

    #include <iostream>using namespace std;int main() {int a = 20;cout << &a << endl;int *p_a = &a;cout << p_a << endl;return 0;
    }
    

    在这里插入图片描述

  • 所以指针可以有多级

    • 这里其实是p_a指针指向了a的内存地址,pp_a指向了指针p_a的内存地址,ppp_a指向了pp_a的内存地址,所以取值的时候三次*可以取出来a的值。
    #include <iostream>using namespace std;int main() {int a = 20;int *p_a = &a;int **pp_a = &p_a;int ***ppp_a = &pp_a;cout << ***ppp_a << endl;return 0;
    }
    

    在这里插入图片描述


指针类型占用的字节

  • 前面说了指针的内容就是一个十六进制的内存地址,所以为数字,我们打印指针类型的大小为8个字节,所有的指针类型都为8个字节

    #include <iostream>using namespace std;int main() {int a = 20;int *p_a = &a;char b = 'a';char *p_b = &b;cout << sizeof p_a << endl;cout << sizeof p_b << endl;return 0;
    }
    

    在这里插入图片描述


指针的加减

  • 指针的加减随指针类型改变,例如int为4个字节,int *类型的指针+1就是+4个字节,long long类型为8个字节,long long*类型的指针+1就为+8个字节

    #include <iostream>using namespace std;int main() {int a = 20;int *p_a = &a;long long c = 10;long long*p_c = &c;cout << "int *类型的加1" << endl;cout << p_a << endl;cout << p_a + 1 << endl;cout << p_a + 2 << endl;cout << "long *类型的加1" << endl;cout << p_c << endl;cout << p_c + 1 << endl;cout << p_c + 2 << endl;return 0;
    }
    

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619739.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode和pycharm等idea编写protobuf文件格式化

想在pycharm或者goland等idea中开发protobuf文件的话&#xff0c;可以安装一个插件&#xff1a;protocol-buffers 安装之后&#xff0c;proto文件就会支持高亮和格式化了。 如果是vscode想要编写proto文件&#xff0c;可以安装另外一个插件&#xff1a;vscode-proto3 安装后&a…

自定义vue-cli 实现预设模板项目

模板结构 主要包括四个部分&#xff1a; preset.jsonprompts.jsgenerator/index.jstemplate/ 项目最终结构 preset.json preset.json 中是一个包含创建新项目所需预定义选项和插件的 JSON 对象&#xff0c;让用户无需在命令提示中选择它们&#xff0c;简称预设&#xff1b;…

【C 数据结构】栈

文章目录 【 1. 基本原理 】栈的分类 【 2. 动态链表栈 】2.1 双结构体实现2.1.0 栈的节点设计2.1.1 入栈2.1.2 出栈2.1.3 遍历2.1.4 实例 2.2 单结构体实现2.2.0 栈的节点设计2.2.1 入栈2.2.2 出栈2.2.3 实例 【 3. 顺序栈 】3.1 入栈3.2 出栈3.3 实例 【 1. 基本原理 】 栈&…

手机数据恢复工具

下载地址&#xff1a;手机数据恢复工具.zip Android/HarmonyOS 文件误删是日常使用电子设备时经常遇到的问题&#xff0c;也许一不小心就就可能会误删。 俗话说&#xff1a;数据无价&#xff0c;一但想要找回一些被删除的文件&#xff0c;就需要耗费大量的精力和财力来恢复文…

three.js捋文档的记录笔记(六):场景 几何体 材质 物体 相机 渲染器的简单理解

三维场景Scene const scene new THREE.Scene();物体形状&#xff1a;几何体 Geometry //创建一个长方体几何对象Geometry const geometry new THREE.BoxGeometry(100, 100, 100); 物体外观&#xff1a;材质Material //创建一个材质对象Material const material new THREE.M…

锂电池寿命预测 | Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测。 参考资料 [1] h…

自编译支持CUDA硬解的OPENCV和FFMPEG

1 整体思路 查阅opencv的官方文档&#xff0c;可看到有个cudacodec扩展&#xff0c;用他可方便的进行编解码。唯一麻烦的是需要自行编译opencv。 同时&#xff0c;为了考虑后续方便&#xff0c;顺手编译了FFMPEG&#xff0c;并将其与OPENCV绑定。 在之前的博文“鲲鹏主机昇腾A…

家庭网络防御系统搭建-将NDR系统的zeek日志集成到security onion

在前面的文章中安装了zeek,这里&#xff0c;安装了securityonion&#xff0c;这里&#xff0c;本文讲述如何将zeek生成的日志发送到siem security onion之中。 所有日志集成的步骤分为如下几步&#xff1a; 日志收集配置日志发送接收日志解析配置日志展示配置 ZEEK日志收集配…

BackTrader 中文文档(十二)

原文&#xff1a;www.backtrader.com/ Visual Chart 原文&#xff1a;www.backtrader.com/docu/live/vc/vc/ 与 Visual Chart 的集成支持两者&#xff1a; 实时数据提供 实时交易 Visual Chart是完整的交易解决方案&#xff1a; 在单个平台上集成图表、数据源和经纪功能 更多…

第⑭讲:Ceph集群管理:守护进程管理、日志管理和端口号配置

文章目录 1.Ceph各组件守护进程的管理方式2.守护进程管理操作2.1.Ceph所有组件的守护进程列表2.2.重启当前主机中所有的Ceph组件2.3.重启主机中所有的Monitor组件2.4.重启指定主机的Monitor组件2.5.重启指定的OSD组件 3.Ceph的日志管理4.Ceph集群各组件的守护进程5.Ceph集群各组…

通讯录(单链表思想)

文章目录 通讯录 2.0头文件通讯录操作函数通讯录主函数 通讯录 2.0 之前分享过使用顺序表思想实现通讯录&#xff0c;现在分享使用单链表实现的通讯录&#xff0c;我们只需要规定每个链表的元素是结构体类型&#xff0c;每个结构体内存放联系人信息即可。 **不断地练习才能熟练…

医用分子筛制氧机设计规范详细介绍

随着技术的不断进步&#xff0c;医用分子筛制氧机作为现代领域的重要设备&#xff0c;其设计规范显得尤为重要。本文将详细阐述医用分子筛制氧机的设计规范&#xff0c;确保设备的性能稳定、安全可靠。 一、设计原则 医用分子筛制氧机的设计应遵循安全、高效、稳定、易维护的原…