C++中一般指针,指针数组,数组指针

凤凰台上凤凰游,凤去台空江自流。
吴宫花草埋幽径,晋代衣冠成古丘。
三山半落青天外,二水中分白鹭洲。
总为浮云能蔽日,长安不见使人愁。

                                                       ——《登金陵凤凰台》【唐】李白 

今天是中秋节,小编在这里祝大家学业有成,工作顺利,家庭和睦,幸福美满。


好的我们今天就来看一看这C++最强功能指针的几种常见的原始指针。

正文:

1.一般类型指针

这里的一般类型指针就是我们最常见的指针(T*),这里的T其实是类型名称,是常见类型的各种名称(全称:tapename,简称T;还有我们要清楚指针的关键其实是*,例如:int *i;这个指针其实就是int型的指针,i其实是这个指针的名字,所以真正有作用的是*)。

实例演示:
include <iostream>
using namespace std;
int main()
{
int i=4;int*I=&i;
cout<<"变量地址"<<I<<endl;
cout<<"间接访问元素本身"<<*I<<endl;double u=3.14;int*U=&u;
cout<<"变量地址"<<U<<endl;
cout<<"间接访问元素本身"<<*U<<endl;char b='c';int*B=&i;
cout<<"变量地址"<<B<<endl;
cout<<"间接访问元素本身"<<*B<<endl;return 0;
}

这里呢我定义了三个指针,这三个指针分别是(int型  double型 char型)。我们首先找了一个变量然后我们将指针指向变量的地址,然后我们再输出指向的元素的地址,间接访问该元素。

这就是最常见的,用的最多的指针,这个指针是一种泛型指针,就是一种大的类型。

2.指针数组,数组指针:

明白了上面的泛型指针,我们就来看看这个有些相似的两种指针,一个是指针数组,一个是数组指针。大家先思考一下,这两个到底有什么区别,它们都是指针吗,还是都不是呢?

以下是对指针数组和数组指针的详细解释:


指针数组


定义:
指针数组是一个数组,其特点在于数组的每个元素都是指针
它通常用于处理字符串数组、动态数组等复杂数据结构。
声明方式:
数据类型 *数组名[数组大小];
例如:int *ptrArray[5]; 定义了一个包含5个指向整数的指针的数组。
用途:
提供了存储多个指针的机制,每个指针可以指向不同类型的数据或对象。
在处理字符串数组时非常有用,因为字符串在C语言中通常是通过字符指针来表示的。
操作:
需要为每个指针分配内存或指向一个有效的地址。
通过指针数组,可以方便地访问和修改所指向的数据。

数组指针


定义:
数组指针是一个指针,它指向一个数组的首地址
它通常用于处理多维数组或需要直接操作整个数组的情况。
声明方式:
数据类型 (*指针名)[数组大小];
例如:int (*arrayPtr)[5]; 定义了一个指向包含5个整数的数组的指针。
用途:
允许通过单个指针来操作整个数组。
在处理多维数组时特别有用,因为它可以直接指向数组的一行或一块连续内存。
操作:
可以通过数组指针来遍历和访问数组的所有元素。
使用多级间接引用来访问和修改数组中的数据。
区别与联系
区别:指针数组是数组,其元素为指针;而数组指针是指针,它指向一个数组。
联系:它们都与指针和数组相关,是C语言中处理复杂数据结构的重要工具。在实际编程中,根据具体需求选择使用指针数组或数组指针。

 怎么样大家想到了吗,大家有没有被这两个相似的名称所搞糊涂呢?(刚开始分不清很正常)

简单来说其实 指针数组(array of pointers)从英文名字大家就可以看出端倪,这数组指针其实就是一个数组里的元素都是指针,重点是后面地数组,所以这指针数组·就是数组。

数组指针(a pointer to an array)这个其实就是一个指向数组的指针罢了,本质上是指针,指向的对象是数组罢了,数组还是那个正常的数组。

定义方法:

指针数组:T*t[];

数组指针:T(*t)[];

例如:

指针数组:int*t[];

数组指针:int(*t)[];

这就是简单的表示方法,从这两种表示方式我们也可以看到各自的特点。大家看一看这两个表示方法看一看是否什么发现。其实就是[]的优先级问题。有[]的优先级会更加的高(在一个表达式中)。比如指针数组的T*t[];我们可以将其改写成这样:T*(t[]);这样其实我们看到的就是一个数组,只不过数组里的元素都是指针罢了。再看数组指针:int(*t)[];这里的小括号使其变成一个指针,只不过指向的目标是一个数组(正常的数组,数组元素都是正常的元素)。

实例演示:
include <iostream>
using namespace std;
int main()
{
int a[4]={0x80000000,0xFFFFFFFF,0x00000000,77}
int *x[4];
int (*y)[4];
y=&i;for(int i=0;i<4;i++)
{
x[i]=&a[i];
}cout<<*x[0]<<endl;
cout<<(*y)[3]<<endl;return 0;
}

代码中我们定义了一个数组(其中的三个元素我是利用了补码的内容);然后我们分别定义指针数组,数组指针。由于数组指针y是一个指向数组的指针,所以我们可以直接将数组a的地址赋给y;然后我们写了一个循环,由于指针数组x是数组,所以利用循环才可以给其元素赋值,且由于指针数组的元素是指针所以我们将数组a的元素的地址分别赋值给x的元素。然后输出结果就没问题了。

这就是几种常见的原始指针的基本知识。我们主要理解的就是数组指针和指针数组的区别和定义方式。这里呢我再留一个小的问题:我们可不可以输出cout<<x[0]<<endl;呢?为什么?我们下期揭晓答案。


🆗到这里,这篇关于:C++中一般指针,指针数组,数组指针就说完了,求一个免费的赞,感谢阅读。

下期预告:C++中const与指针

 

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

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

相关文章

自然语言处理实战项目全解析

自然语言处理&#xff08;NLP&#xff09;作为人工智能领域的重要分支&#xff0c;正日益受到关注。无论是在智能客服、文本分析&#xff0c;还是情感分析等场景&#xff0c;NLP都扮演着至关重要的角色。在这篇博客中&#xff0c;我将分享几个与热门搜索主题贴近的实战项目案例…

ElasticSearch数据类型和分词器

一、数据类型 1、Text &#xff08;文本数据类型&#xff09; 2、Keyword&#xff08;关键字数据类型&#xff09; 3、Alias&#xff08;别名类型&#xff09; 4、Arrays (集合类型) 5、日期类型 6、Numeric &#xff08;数值数据类型&#xff09; 7、Boolean&#xff0…

智能硬件从零开始的设计生产流程

文章目录 市场分析团队组建ID设计结构设计pcba设计软件开发手板EVT开模DVTPVTMP 智能硬件研发是一个复杂的过程, 当然一件事要发出萌芽必须得有人, 有一天,几个合伙人凑在一起,说一起开发个智能硬件产品吧,于是故事开始了. 市场分析 合伙人: 万物互联的时代, 智能音箱已经成为…

Docker和K8S

Docker技术可以将生成的镜像&#xff0c;在docker容器中运行。Build Once Run Anywhere K8s是对容器集群进行管理协调的工具 一个K8S集群 有一个master节点和多个node节点 master节点里面有 1、etcd&#xff1a;文件保存集群各个节点的状态数据&#xff0c;配置数据等。使用raf…

递归10小题

注&#xff1a;操作数字的数组均为int [ ]型&#xff0c;操作字符串均为char [ ]型 下面的10个问题很常见&#xff0c;在这里都是用递归解决的。涉及到数组的问题&#xff0c;需要有指针的知识。 1.求1到n的和 int getSum(int n)//求1到n的和 {if(n1){return 1;}return ngetS…

LDR6020,单C口OTG,充放一体新潮流!

PD&#xff08;Power Delivery&#xff09;芯片实现单Type-C接口输入和输出OTG&#xff08;On-The-Go&#xff09;功能&#xff0c;主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释&#xff1a; 一、PD芯片基础功能 …

c++ gtsam/geometry/Pose3.h详细介绍

gtsam/geometry/Pose3.h 是 GTSAM 库中的一个头文件&#xff0c;定义了 Pose3 类。Pose3 用于表示三维空间中的位姿&#xff08;即位置和姿态&#xff09;&#xff0c;它是处理和表示三维空间变换的核心类之一。以下是对 Pose3 类的详细介绍&#xff1a; Pose3 类概述 Pose3 …

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用&#xff08;text2sql&#xff09;》 利用langchain 中create_sql_agent 创建一个数据库代理智能体&#xff0c;但是实测中发现&#xff0c;使用 create_sql_agent 在对话中&#x…

Qt控制开发板的LED

Qt控制开发板的LED 使用开发板的IO接口进行控制是嵌入式中非常重要的一点&#xff0c;就像冯诺依曼原理说的一样&#xff0c;一个计算机最起码要有输入输出吧&#xff0c;我们有了信息的接收和处理&#xff0c;那我们就要有输出。 我们在开发板上一般都是使用开发板的GPIO接口…

七、垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器1.1 Serial收集器(-XX:UseSerialGC -XX:UseSerialOldGC)1.2 Parallel Scavenge收集器(-XX:UseParallelGC(年轻代),-XX:UseParallelOldGC(老年代))1.3 ParNew收集器(-XX:UseParNewGC)1.4 C…

RNN股票预测(Pytorch版)

任务&#xff1a;基于zgpa_train.csv数据,建立RNN模型,预测股价 1.完成数据预处理&#xff0c;将序列数据转化为可用于RNN输入的数据 2.对新数据zgpa_test.csv进行预测&#xff0c;可视化结果 3.存储预测结果&#xff0c;并观察局部预测结果 备注&#xff1a;模型结构&#xff…

MATLAB 可视化基础:绘图命令与应用

目录 1. 绘制子图1.1基本绘图命令1.2. 使用 subplot 函数1.3. 绘图类型 2.MATLAB 可视化进阶(以下代码均居于以上代码的数据定义上实现)2.1. 极坐标图2.3. 隐函数的绘制 3.总结 在数据分析和科学计算中&#xff0c;数据可视化是理解和解释结果的关键工具。今天&#xff0c;我将…

.bixi勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言 随着网络技术的飞速发展&#xff0c;网络安全威胁日益加剧&#xff0c;各种勒索病毒层出不穷。其中&#xff0c;.bixi勒索病毒&#xff08;也称为Bixi Ransomware&#xff09;作为一种新兴的网络安全威胁&#xff0c;对个人用户和企业数据安全构成了严重威胁。本文91数据…

PHP7 json_encode() 浮点小数溢出错误

原因已找到, 该现象只出现在PHP 7.1版本上 建议使用默认值 serialize_precision -1 即可 事情是这样的,项目里发现一个奇怪的现象,json_encode一个带浮点价格的数据, 出现溢出, 比如: echo json_encode(277.2); // 输出结果为: 277.199999999999989这明显是不能接受的, 数据…

【C++】基础知识 笔记

目录 1.1 基本结构&#xff1a; 1.2 注释 单行注释 多行注释 1.3 变量 1.4 常量 C定义常量两种方式 1.5 关键字&#xff08;标识符&#xff09; 标识符起名规则 1.1 基本结构&#xff1a; #include "iostream" using namespace std; //以上两行是预处理指令…

Text2vec -文本转向量

文章目录 一、关于 Text2vec1、Text2vec 是什么2、Features3、Demo4、News5、Evaluation英文匹配数据集的评测结果&#xff1a;中文匹配数据集的评测结果&#xff1a; 6、Release Models 二、Install三、使用1、文本向量表征1.2 Usage (HuggingFace Transformers)1.3 Usage (se…

标准库标头 <barrier>(C++20)学习

此头文件是线程支持库的一部分。 类模板 std::barrier 提供一种线程协调机制&#xff0c;阻塞已知大小的线程组直至该组中的所有线程到达该屏障。不同于 std::latch&#xff0c;屏障是可重用的&#xff1a;一旦到达的线程组被解除阻塞&#xff0c;即可重用同一屏障。与 std::l…

NISP 一级 | 5.5 账户口令安全

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 0x01&#xff1a;账户口令安全威胁 当用户在使用各种应用时&#xff0c;需通过账户和口令来验证身份从而访问某些资源&#xff0c;因此&#xff0c;账号口令的安全性非常重要。当前攻击者窃取用户…

深度学习之微积分预备知识点

极限&#xff08;Limit&#xff09; 定义&#xff1a;表示某一点处函数趋近于某一特定值的过程&#xff0c;一般记为 极限是一种变化状态的描述&#xff0c;核心思想是无限靠近而永远不能到达 公式&#xff1a; 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

C语言 | Leetcode C语言题解之第412题Fizz Buzz

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ char ** fizzBuzz(int n, int* returnSize) {/*定义字符串数组*/char **answer (char**)malloc(sizeof(char*)*n);for(int i 1;i<n;i){/*分配单个字符串…