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

指针的使用——基本数据类型、数组、结构体

1 引言

对于学习指针要弄清楚如下问题基本可以应付大部分的场景:

①  指针是什么?
②  指针的类型是什么?
③  指针指向的类型是什么?
④  指针指向了哪里?

2 如何使用指针

任何东西的学习最好可以总结成一种通用化的方法。笔者总结了一下指针的使用步骤:

① 声明指针变量;
② 初始化;
③ 访问指针指向的数据。

3 指针的使用示例

3.1 数值指针

数值指针的使用分为三个步骤:

① 声明一个数值指针变量;
② 初始化这个数值指针变量;
③ 访问这个数值指针变量指向的数据。

1)代码示例:

 //-----------------声明指针变量
int* prt_a = nullptr;//声明一个整型数指针变量,nullptr—空指针
//-------------初始化指针变量,采用指向已有变量的方式-----
int a = 10; //定义整型数值常量
prt_a = &a;//指针指向了变量a的地址&a//---------访问指针数据
int my_test = 0;
my_test = *prt_a;
cout << "a = " << a << endl;
cout << "my_test = " << my_test << endl;
cout << "*prt_a = " << *prt_a << endl;
//----------访问并修改指针指向的数据
*prt_a = 20;
cout << "a = " << a << endl;
cout << "*prt_a = " << *prt_a << endl;
//-----访问地址
cout << (void*)prt_a << endl;

 2)运行结果:

3)代码解读:

① 声明一个整型数变量a,它的值为10,它的地址是&a,它在计算机上的执行原理是:在物理上,内存地址为&a的内存处,存放了 (int)10的编码,通过对该内存处的编码解码就可以得到(int)10;
② 声明一个指针变量prt_a,它指向了变量a的地址;
③ 通过解引用*prt_a,就可以获取指针变量指向的数据,也就是a的值,int(10);
④ 将指针变量指向的数据赋值给整型变量my_test ;
⑤ 将指针变量指向的数据修改为20,实际上也就是将整型变量a的值修改为20。

3.2 数组指针

也是分三个步骤:

① 声明一个数组指针变量;

② 初始化数组指针变量;

③ 访问;

代码示例:

    //指针与一维数组//定义一个指针变量int* array_p = nullptr;//类型是int*//初始化,指向一个数组常量int array[] = { 1,3,4,5 };array_p = array;//数组名是数组首地址,指针类型是int*,指针变量指向的是int,指针指向了数组的首地址cout << sizeof(array) / sizeof(int) << endl;//访问数组for (int i = 0; i < sizeof(array) / sizeof(int);i++){cout << array[i] << endl;//访问数组的元素cout << *(array_p + i) << endl;//采用指针变量,访问数组的元素cout << (void*)(array_p + i) << endl;//访问数组的地址,数组名是首地址,指针+1表示内存里面+一片内存的长度,长度=sizeof(int)=4,所以此处指针的值会+4}

运行结果如下:

代码解读:

① 声明一个整型指针变量,指向空指针;

② 声明一个数组常量,它的首地址即是数组名,数组的元素按顺序存放在首地址处的物理内存里,长度是数组占的字节数4*4 = 16个字节;

③ 将指针变量指向数组首地址,数组的类型必须是int;

④ 访问:

  • 通过数组索引去访问数组元素;
  • 通过指针解引用的方式,依次访问数组元素,array_p + i是第i个元素的地址;
  • 访问指针的地址,每个元素之间地址的差值是4(int类型占4个字节)。

3.3 结构体指针

结构体指针的使用和数组指针的使用类似,只是结构体指针使用前需要先声明一个结构体(数据类型),因此可以分为4个步骤:

① 声明一个结构体(对于基本数组类型或者数组而言,使用的是默认的数据类型——int、char、float等,所以不需要声明);

② 声明一个结构体指针;

③ 初始化结构体指针;

④ 访问结构体的元素。

1)代码示例: 

   //声明一个结构体mystruct test = { 10,'d',3.14f };//初始化结构体//声明一个结构体指针mystruct* ptr = nullptr;//初始化,指向结构体的首地址ptr = &test;//结构体名称不是首地址,需要用&来 获取首地址//访问结构体里的元素cout << ptr->a << endl;cout << ptr->b << endl;cout << ptr->c << endl;//修改元素ptr->c = 50.0f;//赋值cout << ptr->c << endl;//访问结构体元素的地址,结构体单元之间可能存在空隙,不能用ptr+1来访问cout << (void*)&ptr->a << endl;cout << (void*)&ptr->b << endl;cout << (void*)&ptr->c << endl;

2)运行结果如下:

3)代码解读:

① 声明了一个结构体常量;

② 声明了一个结构体指针,指向空指针;

③ 初始化指针,指向结构体常量的首地址,注意:和数组不一样,结构体的首地址不是结构体名,是&结构体名

④ 通过指针访问结构体的元素,格式是:->;

⑤ 修改第三个元素值的值,值由3.14变为50;

⑥ 访问结构体元素的地址,注意:结构体单元之间可能存在空隙,不能用ptr+1来访问

4 总结

通过上面的案例对引言中提到的问题进行一下总结,如下:

① 指针变量是什么?指针变量就是变量的地址,也就是变量存放在物理内存上的位置,把内存比作电影院的座位,指针变量就是座位的序号;
② 指针类型是什么?去掉变量名以后剩下的就是指针类型;
③ 指针指向的类型是什么?去掉*变量名以后,就是指针指向的类型;
④ 指针指向了哪里?指针指向了变量的所存放的地址。

5 注意事项

 ① 两个指针不能进行加法运算,这是非法操作,因为进行加法后,得到的结果指向一个不知所向的地方,而且毫无意义
② 指针的值是XX,相当于说该指针指向以XX为首地址的一片区域,这片区域的大小由指针指向的类型决定;
③ &是取地址运算符,*p 的结果是p 所指向的东西。

相关文章:

指针的使用——基本数据类型、数组、结构体

1 引言 对于学习指针要弄清楚如下问题基本可以应付大部分的场景&#xff1a; ① 指针是什么&#xff1f; ② 指针的类型是什么&#xff1f; ③ 指针指向的类型是什么&#xff1f; ④ 指针指向了哪里&#xff1f; 2 如何使用指针 任何东西的学习最好可以总结成一种通用化的…...

TK海外抢单源码/指定卡单

​ 抢单源码&#xff0c;有指定派单&#xff0c;打针&#xff0c;这套二改过充值跳转客服 前端vue 后端php 两端分离 可二开 可以指定卡第几单&#xff0c;金额多少&#xff0c; 前后端开源 PHP7.2 MySQL5.6 前端要www.域名&#xff0c;后端要admin.域名 前端直接静态 伪静…...

Docker MCP 目录和工具包简介:使用 MCP 为 AI 代理提供支持的简单安全方法

目录 Model Context Protocol 势头强劲 — 还需要改进哪些?发现正确的、官方的和/或值得信赖的工具是很困难的复杂的安装和分发身份验证和权限不足Docker 如何帮助解决这些挑战在安全、隔离的容器中轻松发现和运行 MCP 服务器一键式 MCP 客户端集成,内置安全认证企业就绪的 M…...

【Linux】Linux 环境变量

参考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/125533127 一、环境变量 1.1 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&am…...

OpenCV在图像上绘制文字示例

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 OpenCV中除了提供绘制各种图形的函数外&#xff0c;还提供了一个特殊的绘制函数&#xff0c;用于在图像上绘制文字。这个函数是putText()&#xff0c;它是命名空间cv中的函数&#xff0c;其声明如下&#xff…...

Java 抗量子算法:构建后量子时代的安全基石

一、量子计算带来的加密挑战 在传统加密体系中&#xff0c;RSA、ECC 等公钥算法依赖大数分解和离散对数问题的难解性。然而&#xff0c;量子计算机的 Shor 算法可在多项式时间内破解这些算法&#xff0c;使现有加密体系面临颠覆性威胁。例如&#xff0c;2048 位 RSA 密钥的破解…...

Kubernetes 集群到 Jumpserver

以下是使用 ServiceAccount Token&#xff08;令牌&#xff09; 连接 Kubernetes 集群到 Jumpserver 的 详细分步指南&#xff0c;包括权限配置、Token 获取和常见问题排查。 1. 创建 ServiceAccount 并分配权限 1.1 创建 ServiceAccount 在 Kubernetes 集群中创建一个专用于…...

Android7 Input(十)View 处理Input事件pipeline

概述: 本文主要描述View对InputEvent事件pipeline处理过程。 本文涉及的源码路径 frameworks/base/core/java/android/view/ViewRootImpl.java InputEvent事件处理 View处理input事件是调用doProcessInputEvents方法&#xff0c;如下所示: void doProcessInputEvents() {//…...

图像数据如何表示为概率单纯形

目录 图像数据灰度图像彩色图像概率单纯形条件应用场景 图像数据 图像数据通常由像素值组成&#xff0c;这些像素值可以是灰度值&#xff08;对于黑白图像&#xff09;或RGB值&#xff08;对于彩色图像&#xff09;。每个像素的值通常在0到255之间。为了将图像数据表示为概率单…...

(11)Service Mesh架构下Java应用实现零信任安全模型

Service Mesh架构下Java应用实现零信任安全模型 📌 TL;DR: 本文详细介绍如何在Service Mesh架构中实现零信任安全模型,包括身份认证、授权控制、加密通信和持续监控四大核心技术,以及与Istio、Envoy等组件的集成方案。 目录 零信任安全模型概述关键技术实现最佳实践Service…...

什么是内网映射?如何将内网ip映射到外网访问?

随着互联网科技和信息技术的快速发展&#xff0c;很多原理及技术开始被应用到互联网信息科技领域&#xff0c;其中内网iP映射就成为非常普通常见的一个操作。那么什么是内网ip映射&#xff1f;如何将内网ip映射到外网&#xff1f; 一、什么是内网ip映射&#xff1f; 简单理解…...

为什么要选择VR看房?VR看房有什么优点?

VR看房&#xff1a;革新传统&#xff0c;重塑体验 在当今社会&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正以前所未有的速度渗透到我们生活的各个领域&#xff0c;其中VR看房作为房地产领域的重要创新。本文将讨论为什么要选择VR看房以及VR看房的主要优点&#xff0…...

linux 串口调试命令 stty

linux 串口调试命令 stty 文章目录 linux 串口调试命令 sttystty 常见命令选项&#xff1a;常用参数&#xff1a;一次性设置串口所有常见参数总结 stty&#xff08;设置终端行模式&#xff09;命令是用来配置终端设备&#xff08;包括串口设备&#xff09;的输入和输出行为的工…...

C++STL-vector的使用

vector的定义方式 方式1&#xff1a;构造某一个类型的空容器 vector<int> v1;//构造一个int类型的空容器 方式2&#xff1a;构造一个含有n个val的某类型容器 vector<int> v2(10, 2);//构造一个含有10个2的int类型的容器 方式3&#xff1a;拷贝构造某类型容器 …...

图简记。。

模仿&#xff1a; algorithm-journey/src/class059/Code01_CreateGraph.java at main algorithmzuo/algorithm-journey Code01_CreateGraph C语言&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXN 11 #define MAX…...

pytorch基本运算-范数

引言 前序学习进程中&#xff0c;已经对pytorch基本运算有了详细探索&#xff0c;文章链接有&#xff1a; 基本运算 广播失效 乘除法和幂运算 hadamard积、点积和矩阵乘法 上述计算都是以pytorch张量为运算元素&#xff0c;这些张量基本上也集中在一维向量和二维矩阵&#x…...

uefi协议设计目的

在EDK2的术语体系中&#xff0c;GUID定义的是协议的标识符&#xff0c;而具体实现的函数集合称为协议的实现。它们是同一协议的不同抽象层次&#xff0c;以下是详细解释&#xff1a; 1. 协议&#xff08;Protocol&#xff09;的两层含义 (1) 协议规范&#xff08;接口定义&am…...

springcloud openfeign 偶现 Caused by: java.net.UnknownHostException

背景 最近查看日志发现某服务偶现Caused by: java.net.UnknownHostException 同时查看eureka的access.log 出现如下异常 10.xxx.xxx.xxx - - [27/May/2025:23:57:29 0800] “PUT /eureka/apps/{appName}/{host}:xxx-job:8082?statusUP&lastDirtyTimestamp1748351637173 H…...

Transformer实战——词嵌入技术详解

Transformer实战——词嵌入技术详解 0. 前言1. 词嵌入基础2. 分布式表示3. 静态嵌入3.1 Word2Vec3.2 GloVe 4. 使用 Gensim 构建词嵌入5. 使用 Gensim 探索嵌入空间6. 动态嵌入小结系列链接 0. 前言 在本节中&#xff0c;我们首先介绍词嵌入的概念&#xff0c;然后介绍两种实现…...

[pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在本账号CSDN资源下载&#xff0c;或者访问链接&#xff1a; http://www.umlchina.com/url/quizad.html 如果需要提取码&#xff1a;umlc 文件夹中的“300道软件方法强化自测题2025…...

Vue3入门指南:从零到精通的快速上手

齐爷学vue3 一、Vue3入门 vite&#xff1a;前端构架工具&#xff0c;构建速度快于webpack。轻量快速、对TS&#xff0c;JSX&#xff0c;CSS开箱即用、按需编译。 创建Vue3工程 1.在想要创建Vue3的位置打开cmd&#xff0c;执行如下命令。 npm create vuelatest 2.功能只选择…...

前端常见错误

1. TypeError: Cannot read property xxx of undefined 错误原因&#xff1a;尝试访问一个 undefined 或 null 对象的属性 / 方法。 示例代码&#xff1a; const user { name: "John" }; console.log(user.address.street); // user.address 为 undefined 解决方…...

吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py

前提条件&#xff1a; 1、吴恩达MCP课程&#xff08;5&#xff09;&#xff1a;research_server_prompt_resource.py 2、server_config_prompt_resource.json文件 {"mcpServers": {"filesystem": {"command": "npx","args"…...

关于DDOS

DDOS是一门没什么技术含量的东西&#xff0c;其本质而言是通过大量数据报文&#xff0c;发送到目标受害主机IP地址上&#xff0c;导致目标主机无法继续服务&#xff08;俗称&#xff1a;拒绝服务&#xff09; DDOS灰产人期望达成的预期目标&#xff0c;几乎都是只要把对面打到 …...

云服务器自带的防御可靠吗

最近有不少朋友问我&#xff0c;云服务器自带的防御靠不靠谱。就拿大厂的云服务器来说&#xff0c;很多都自带5G防御。但这5G防御能力&#xff0c;在如今的网络攻击环境下&#xff0c;真的有些不够看。 如今&#xff0c;网络攻击手段层出不穷&#xff0c;攻击流量更是越来越大。…...

Java详解LeetCode 热题 100(27):LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;迭代法&#xff08;哨兵节点&#xff09;3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;递归法4.…...

设计模式——抽象工厂设计模式(创建型)

摘要 抽象工厂设计模式是一种创建型设计模式&#xff0c;旨在提供一个接口&#xff0c;用于创建一系列相关或依赖的对象&#xff0c;无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建&#xff0c;相比工厂方法模式&#xff0c;能创建一个产品族。该模…...

基于LocalAI与cpolar技术协同的本地化AI模型部署与远程访问方案解析

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址前言 各位极客朋友们!今天要向大家推荐一套创新性的本地部署方案——LocalAI技术架构。这款开源工具包能够将普通配置的笔记本电脑转化为具备强大算力的AI工作站,轻松实现…...

Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)

一、准备工作 在开始正式部署之前,请确认以下前提条件已经准备好: 你有一台运行 Linux 系统(CentOS 或 Ubuntu)的服务器; 服务器有公网 IP,本例中使用:111.229.204.102; 你拥有该服务器的管理员权限(可以使用 sudo); 打算使用 Flask 构建一个简单的 Web 接口; 服务…...

霍尔效应传感器的革新突破:铟化铟晶体与结构演进驱动汽车点火系统升级

一、半导体材料革新&#xff1a;铟化铟晶体的电压放大机制 铟化铟&#xff08;InSb&#xff09;晶体因其独特的能带结构&#xff0c;成为提升霍尔电压的关键材料。相较于传统硅基材料&#xff0c;其载流子迁移率高出3-5倍&#xff0c;在相同磁场强度下可显著放大霍尔电压。其作…...