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.mzph.cn/news/817157.shtml

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

相关文章

pgcrypto

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14 文档用途 本文详细介绍pgcrypto。 详细信息 1、简介 pgcrypto是PostgreSQL的一个扩展模块&#xff0c;用于提供加密和密码散列功能。它扩展…

Java代码基础算法练习-拆分一个三位数的个位、十位、百位-2024.04.14

任务描述&#xff1a;输入一个三位数&#xff0c;逆序输出这个三位数的个位、十位、百位对应的数字&#xff0c;用空格分开。 任务要求&#xff1a; 代码示例&#xff1a; package April_2024;import java.util.Scanner; public class a240414 {public static void main(Strin…

972: 统计利用先序遍历创建的二叉树的宽度

解法&#xff1a; #include<iostream> #include<queue> using namespace std; // 定义二叉树结点 struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode(char x) :val(x), left(NULL), right(NULL) {}; }; // 先序递归遍历建立二叉树 TreeNode* bu…

深入理解 copyWithin:提升JavaScript图形处理中数组数据的复用与变换能力

引言 copyWithin 是 JavaScript 中数组对象的一个实例方法&#xff0c;用于在数组内部进行元素的复制和移动。从数组的指定位置拷贝元素到另一个指定位置&#xff0c;覆盖原数组中的相应位置。它不会改变数组的长度。 copyWithin 方法解析 语法&#xff1a; arr.copyWithin…

【uniapp】状态存储Pinia的使用,以及它的数据持久化

1、下载安装pinia&#xff0c;引入pinia //stores->index.ts import { createPinia } from pinia import persist from pinia-plugin-persistedstate //持久化插件// 创建 pinia 实例 const pinia createPinia() // 使用持久化存储插件 pinia.use(persist)// 默认导出&…

spark实验三-spark进阶编程

1&#xff0e;Spark编程统计各地区租房人数 实验目标&#xff1a; (1) 掌握在IntelliJ IDEA 中操作spark程序开发 (2) 打包程序提交集群运行 实验说明&#xff1a; 现有一份某省份各地区租房信息文件 house.txt&#xff0c;文件中共有8个数据字段&#xff0c;字段说明…

vue 项目中添加DES加密

vue 项目中添加DES加密 由于现在项目使用http协议&#xff0c;且登录界面是明文传输&#xff0c;项目真正上线后基本的密码传输都很不安全。 决定用前端框架加密后再进行传输&#xff0c;以提高密码传输过程中的安全性。 crypto-js 是一个流行的 JavaScript 加密库&#xff0…

vxe-vxe-toolbar中vxe-button选中切换status

1.VXE-Toolbar 在VXE-Toolbar中&#xff0c;可以使用vxe-button组件实现按钮的选中切换效果&#xff0c;并且可以根据不同的选中状态显示不同的样式。你可以通过设置status属性来控制按钮的选中状态&#xff0c;并通过监听按钮的点击事件来切换选中状态。需要在vxe-toolbar中添…

服务器配置ssh免密登录

需求:备份test10.22.33.96上的文件到 test10.22.33.97的定时脚本,需要使用scp命令传输文件,两台节点没有ssh互信,需要配置服务器之间的SSH互信为了让两台或多台服务器之间能够无密码自动登录 步骤1&#xff1a;生成密钥对 在每一台需要建立互信的服务器(test10.22.33.96)上执…

每日两题1

文章目录 使用最小花费爬楼梯91解码方法 使用最小花费爬楼梯 class Solution { public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() 2)return min(cost[0],cost[1]);vector<int> dp;dp.reserve(cost.size()1);dp[0] 0;dp[1] 0;for(int i…

【域适应】基于深度域适应MMD损失的典型四分类任务实现

关于 MMD &#xff08;maximum mean discrepancy&#xff09;是用来衡量两组数据分布之间相似度的度量。一般地&#xff0c;如果两组数据分布相似&#xff0c;那么MMD 损失就相对较小&#xff0c;说明两组数据/特征处于相似的特征空间中。基于这个想法&#xff0c;对于源域和目…

顶切,半顶切是什么意思?

齿轮加工及刀具中有一些特定名词或者叫法&#xff0c;不熟悉的小伙伴可能最开始会有一些困惑&#xff0c;这不&#xff0c;最近有小伙伴问了一个问题&#xff1a;顶切是说齿顶的倒角吗&#xff1f; 今天就给大家说说顶切和半顶切。 一、顶切 Topping 从字面上可以看到可以想到…

Swagger API 文档 | SpringCloudGateway 集成 SpringDoc

文章目录 工作原理方案 1:配置 swagger-ui.urls方案 2:通过路由定义动态配置具体案例第 1 步:导入代码第 2 步:配置 Swagger Url 列表第 3 步:启动程序第 4 步:查看注册中心第 5 步:访问网关 Swagger UI相关博文😎 本节目标: Spring Cloud Gateway 集成 SpringDoc,实…

MySQL的权限管理

MySQL的权限管理 在理解MySQL的权限管理之前&#xff0c;我们需要先了解其架构设计以及权限管理在该架构中的定位。 MySQL的架构设计 MySQL数据库系统采用了分层的架构设计&#xff0c;主要可以分为以下几个层级&#xff1a; 连接层&#xff1a;最外层&#xff0c;处理连接…

x264 8x8 水平预测汇编分析

C 语言代码 void s264_predict_8x8_h_c( pixel *src, pixel edge[36] ) { PREDICT_8x8_LOAD_LEFT #define ROW(y) MPIXEL_X4( srcy*FDEC_STRIDE0 ) \ MPIXEL_X4( srcy*FDEC_STRIDE4 ) PIXEL_SPLAT_X4( l##y ); ROW(0); ROW(1); ROW(2); ROW(3); ROW(4); ROW(5); ROW(6); ROW(7…

VUE3:自定义loading指令

一、效果描述 在一个div中使用该指令并绑定一个变量&#xff0c;通过修改变量实现Loading的显示与隐藏。 二、代码与使用方式 1.使用指令的vue组件 <template><div v-loading"showLoading"></div> </template> <script setup lang&q…

爬虫 selenium

爬虫 selenium 【一】介绍 【1】说明 Selenium是一款广泛应用于Web应用程序测试的自动化测试框架 它可以模拟用户再浏览器上的行为对Web应用进行自动化测试 主要作用&#xff1a; 浏览器控制&#xff1a;启动、切换、关闭不同浏览器元素定位于操作&#xff1a;通过CSS选择器…

vscode中运行js

vscode中运行js 目前vscode插件运行js都是基于node环境&#xff0c;vscode控制台打印有些数据不方便等缺点。 每次调试在浏览器中运行js&#xff0c;需要创建html模板、插入js。期望能够直接运行js可以打开浏览器运行js&#xff0c;在vscode插件市场找到一款插件可以做到。 插…

yolo系列(之一)

深度学习经典检测算法 two-stage (两阶段) : Faster-rcnn Mask-Rcnn系列 &#xff08;输入图像---》CNN特征---》预选框---》输出结果&#xff09; one-stage (单阶段): YOLO系列 &#xff08;输入图像---》CNN特征---》输出结果&#xff09; one-stage的特点&#xff1a;&…

深度学习学习日记4.15 (面向GPT学习)

精确学习时间&#xff08;09点35分开始&#xff09; 深度学习 torch.nntorch.utils.datanumpytorchvision中的模块有哪些os 模块PIL&#xff08;Python Imaging Library&#xff09;tqdmmatplotlibnn.ReLU inplace参数设为Truenn.relu 训练的迭代过程梯度清零loss指标计算为什…