c/c++ 指针

参考链接:https://blog.csdn.net/soonfly/article/details/51131141

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址

一、指针定义

复杂指针定义涉及较多运算符,分析指针功能从变量名处起,根据运算符优先级结合,一步一步分析。首先根据变量最先进行运算的远算符确定该变量是指针,还是该变量存储的数据类型、返回值是指针。如果该变量是指针,只要把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。

int p; //这是一个普通的整型变量
int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针
int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组
int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组
int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P 是一个指向由整型数据组成的数组的指针
int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.
int p(int); //从P 处起,先与()结合,说明P 是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int 结合,说明函数的返回值是一个整型数据
int *p(int); //从P处开始,先与()结合,说明P是一个函数,有一个整形变量的参数,然后与*结合,说明函数返回值是一个指针,然后再与int结合,说明指针所指向的内容的类型为int类型,所以p是一个有一个整型参数返回值为整型数据的指针的函数
int (*p)(int); //从P 处开始,先与指针结合,说明P 是一个指针,然后与()结合,说明指针指向的是一个函数,然后再与()里的int 结合,说明函数有一个int 型的参数,再与最外层的int 结合,说明函数的返回类型是整型,所以P 是一个指向有一个整型参数且返回类型为整型的函数的指针

二.指针的算术运算

使用*获得指针所指地址存放数据,注意和定义时使用*区分,定义时使用*只是表明p是一个指针元素,左侧表示该指针元素所指向地址。使用&获取元素首地址(返回数据类型是一个指向该变量数据类型的指针)。

char sh='a';//定义char类型变量sh并赋值为'a'
char *p=&sh;//定义char类型指针,并指向sh变量
cout<<*p;//获得指针p所指对象内容,输出a

指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。每+1意味着指针所指地址,移动到下一个该类型元素。例如int *每次加1,意味着实际指向内存地址加4(int类型数据占4个字节),double*每次加1,意味着实际指向内存地址加8(double类型数据占8个字节)。

int array[5] = { 1,2,3 };//声明大小为5的整数数组array,初始化前三个元素,后面两个元素默认为0
int* ptr = array;//定义int类型指针,赋值为array(数组名本身也可以看作一个指针)
for (int i = 0; i < 5; i++)
{(*ptr)++;//指针所指向元素+1ptr++;//指针+1(指向下一个该指针元素地址),int类型指针所指元素占4个字节,所以当前指针指向4个字节后的地址,即指向array第二个元素cout << array[i] << ' ';//依次输出2 3 4 1 1
}

三.指针和结构体的关系

通过结构体指针访问结构体成员变量

1.通过->运算符

2.先通过*运算获得指针所指内容(此处为结构体ss),再通过.运算获得,注意加小括号(.运算优先级高于*)

struct MyStruct
{int a;int b;int c;
};
struct MyStruct ss = { 20,30,40 };
//声明了结构对象ss,并把ss 的成员初始化为20,30 和40。
struct MyStruct* ptr = &ss;//通过指针访问结构体元素
cout << ptr->a << endl;//1.通过->运算符
cout << (*ptr).b << endl;//2.先通过*运算获得指针所指内容(此处为结构体ss),再通过.运算获得,注意加小括号(.运算优先级高于*)

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

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

相关文章

Linux系统——LVS-DR群集部署及拓展

目录 引言 1.LVS的工作模式及其工作过程 2.列举出LVS调度算法 3.LVS调度常见算法&#xff08;均衡策略&#xff09; 3.1固定调度算法:rr&#xff0c;wrr&#xff0c;dh&#xff0c;sh 3.2动态调度算法:wlc&#xff0c;lc&#xff0c;lblc 4.LVS三种工作模式区别 一、I…

前端每日一练:vue3 为什么要用 proxy 替换 Object.defineproperty ?为什么只对对象劫持,而要对数组进行方法重写?

vue3 为什么要用 proxy 替换 Object.defineproperty &#xff1f; Vue 3 在设计上选择使用 Proxy 替代 Object.defineProperty 主要是为了提供更好的响应性和性能。​Object.defineProperty 是在 ES5 中引入的属性定义方法&#xff0c;用于对对象的属性进行劫持和拦截。Vue 2.…

更快更强,Claude 3全面超越GPT4,能归纳15万单词

ChatGPT4和Gemini Ultra被Claude 3 AI模型超越了&#xff1f; 3月4日周一&#xff0c;人工智能公司Anthropic推出了Claude 3系列AI模型和新型聊天机器人&#xff0c;其中包括Opus、Sonnet和Haiku三种模型&#xff0c;该公司声称&#xff0c;这是迄今为止它们开发的最快速、最强…

.NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例

在本文中&#xff0c;我们将详细介绍.NET Core日志内容&#xff0c;包括不同日志级别的区别&#xff0c;以及一些常用的日志记录实用工具和第三方库。同时&#xff0c;我们还将通过示例来展示如何使用这些工具和库。 一、.NET Core日志级别 .NET Core日志系统提供了五种日志级…

Linux系统——SElinux

目录 前言 一、SELinux 的作用及权限管理机制 1.SELinux 的作用 1.1DAC 1.2MAC 1.3DAC 和 MAC 的对比 2.SELinux 基本概念 2.1主体&#xff08;Subject&#xff09; 2.2对象&#xff08;Object&#xff09; 2.3政策和规则&#xff08;Policy & Rule&#xff09;…

Nginx+Tomcat实现负载均衡动静分离

目录 一、背景与环境 1. 背景 2. 环境图示 3. 目标 二、操作过程 1. 第一层 2. 第二层 一、背景与环境 1. 背景 在一个Web应用程序中&#xff0c;通常会将动态内容&#xff08;由Tomcat处理&#xff09;与静态内容&#xff08;如图片、CSS、JavaScript文件等&#xff…

什么是5G边缘计算网关?

随着5G技术的飞速发展和普及&#xff0c;边缘计算作为5G时代的关键技术之一&#xff0c;正日益受到业界的关注。而5G边缘计算网关&#xff0c;作为连接5G网络和边缘计算节点的桥梁&#xff0c;扮演着至关重要的角色。HiWoo Box&#xff0c;作为一款卓越的5G边缘计算网关&#x…

springcloud:3.5测试慢调用熔断降级

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…

Unity3D Netty网络框架的使用详解与原理详解

前言 Unity3D是一款强大的跨平台游戏开发引擎&#xff0c;而Netty是一个高性能、异步事件驱动的网络应用框架。结合使用Unity3D和Netty可以实现网络游戏的开发&#xff0c;实现客户端和服务器端之间的通信。本文将详细介绍Unity3D和Netty的使用方法和原理&#xff0c;以及如何…

学习大数据,所必需的java基础(8)

文章目录 字符缓冲流字符缓冲输出流 _Buffered和Writer字符缓冲输入流字符缓冲流练习 转换流字符编码字符集转换流转换流_OutputStreamWriter序列流和反序列流的介绍序列化流_ObjectOutputStream反序列化_ObjectInputStream不想被序列化操作反序列化时出现的问题以及分析和解决…

解决:hive数据库初始失败

1、背景 采用Mysql数据库保存hive元数据时&#xff0c;我们一般是这样操作&#xff1a; 启动mysql服务&#xff1b;用mysql新建一个库&#xff08;比如库名为"hive“&#xff0c;这个“hive”与hive-site.xml中的local:3306/hive的“hive”对应&#xff0c;是用来保存hiv…

滴滴基于 Clickhouse 构建新一代日志存储系统

ClickHouse 是2016年开源的用于实时数据分析的一款高性能列式分布式数据库&#xff0c;支持向量化计算引擎、多核并行计算、高压缩比等功能&#xff0c;在分析型数据库中单表查询速度是最快的。2020年开始在滴滴内部大规模地推广和应用&#xff0c;服务网约车和日志检索等核心平…

SkyWalking 本地启动以及闪退问题

1. 下载包 Downloads | Apache SkyWalking SkyWalking APM包含OAP和UI Java Agent 就是Java 的探针 2. 运行 UI 默认端口是 8080&#xff0c; OAP 默认端口是 11800&#xff08;grpc&#xff09;12800&#xff08;http&#xff09; 如果占用可以修改配置文件 UI 项目的配…

MySQL和Redis Common Command

Ubuntu 配置 MySQL 下载对应版本的deb包并解压&#xff0c;用不到test可删除&#xff0c;wegt或者直接去镜像网站下载均可 tar xvf mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar -C /mnt/d/opt/mysql-debrm -f mysql-community-test_5.7.37-1ubuntu18.04_amd64.deb…

Verdi VC Apps Batch mode 使用

Verdi VC Apps除了能在Verdi gui中启动之外&#xff0c;其实还可以使用batch mode. 下面我简单介绍一下如何使用&#xff1a; $VERDI_HOME/share/VIA/Apps/Bin/ 目录下有各个Apps对应的perl脚本&#xff0c;我们使用该脚本来启动batch mode. 以listRegisters.pl 为例&#xf…

LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤

一 LVS 负载均衡部署的模式 LVS 有三种负载均衡的模式&#xff0c;分别是VS/NAT(nat 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)。 &#xff08;一&#xff09;三种模式原理 及优缺点 1&#xff0c;nat 模式 1.1 原理 原理:首先负载均衡器接收到客户的请求数据包时&am…

【HTML/CSS学习】CSS常见选择器

CSS&#xff08;层叠样式表&#xff09;中有许多常见的选择器&#xff0c;它们用于选择要应用样式的HTML元素。以下是一些常见的CSS选择器&#xff1a; 1. 元素选择器&#xff08;Element Selector&#xff09; 选择所有指定类型的HTML元素。 p {/* 样式规则 */ }2. 类选择器…

GPT-4技术解析:与Claude3、Gemini、Sora的技术差异与优势对比

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

b站小土堆pytorch学习记录—— P18-P22 神经网络+小实战

文章目录 一、卷积层 P181.卷积操作2.代码 二、池化层 P191.池化层简单介绍2.代码&#xff08;1&#xff09;池化操作中数字的变化&#xff08;2&#xff09;池化操作对图片的影响 三、非线性激活 P201.简要介绍2.代码 四、线性层及其他层介绍 P211.线性层2.代码 五、搭建小实战…