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

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与指针

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java入门,初识Java
  • web基础—dvwa靶场(五)File Upload
  • 【CMake】使用CMake在VIsual Studio内构建多文件夹工程
  • JavaScript 事件处理
  • Redis——常用数据类型string
  • python 使用seleniumwire获取响应数据以及请求参数
  • Android前台服务如何在后台启动activity?
  • Linux memcg lru lock提升锁性能
  • 架构与业务的一致性应用:实现企业战略目标和合规管理的全面指南
  • 【nginx】搭配okhttp 配置反向代理
  • [数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别
  • golang中连接达梦数据库使用域名来代替IP时会出现解析问题
  • 【C++学习】 IO 流揭秘:高效数据读写的最佳实践
  • 无法将ggplot图保存为PDF文件怎么办
  • DevOps -CI/CD 与自动化部署
  • [Vue CLI 3] 配置解析之 css.extract
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Angular 响应式表单之下拉框
  • axios 和 cookie 的那些事
  • Facebook AccountKit 接入的坑点
  • java2019面试题北京
  • Odoo domain写法及运用
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Protobuf3语言指南
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • ReactNativeweexDeviceOne对比
  • springMvc学习笔记(2)
  • Vue学习第二天
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 反思总结然后整装待发
  • 将回调地狱按在地上摩擦的Promise
  • 盘点那些不知名却常用的 Git 操作
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 推荐一个React的管理后台框架
  • 微服务入门【系列视频课程】
  • 一些关于Rust在2019年的思考
  • 整理一些计算机基础知识!
  • ​Spring Boot 分片上传文件
  • # Redis 入门到精通(一)数据类型(4)
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #微信小程序:微信小程序常见的配置传值
  • (003)SlickEdit Unity的补全
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3) cmake编译多个cpp文件
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (分享)自己整理的一些简单awk实用语句
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (四)Android布局类型(线性布局LinearLayout)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复