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

C++ 的int*p[]和int(*p)[]的区别

C++ 的int*p[]int(*p)[]的 区别

之前在上课的课件上看到了int*p[]和int(*p)[]的区别,之前老是觉得这两个是一个东西

1. int * p[3]

  • 首先我们知道,[]的优先级是大于*的,因此对于int*p[3]来说,首先解读到的是p[3],是这个一维的数组,数组中有三个元素,都是int*,即int类型的指针。

    #即对于以下三个数组
    int a[2]={1,2};
    int b[2]={3,4};
    int c[2]={5,6};
    #int*p[3]会将数组中的三个指针分别只向a,b,c的首地址

2. int (*p)[3]

  • 由于()的优先级大于[],因此对于int(*p)[3]来说,首先是解读到*p,其被解释为一个指针,而其次才解释到 []

    因此,这说明,这个指针指向的元素是一个长度为3的数组,并且*p表示的数组中第一个元素的地址

    • 假设对于一个一维数组a:

      #例如对于下列的一维数组
      int a[2]={1,2};
      int (*p1)[2]=&a;
      #此时的*p1是一个指针,它指向的数组长度为2*p1的值为数组的的第一个元素的地址
      #因此如果想打印出2时,*p1+1指向2的地址,再取*2的值
      cout<<**(p1+1)<<endl;#若我们使用 q的类型其实是int*[3]
      int*p2=a;
      #若需要打印出2
      cout<<*(p2+1)<<endl;

      因此,其说明其实对于int(*p1)[2]而言,其就是其数据类型应该是与&a相同的,而&q的类型是int*[3]

      所以p1可以看成一个二维指针,只不过a的所有元素都在二维数组中的其中一个维度里了。

    • 假设对于一个二维数组

      int a[2][3]={1,2,3,4,5,6};
      int(*)p[3]=a;
      #如果想打印2
      cout<<*(*p+1)<<endl;
      #如果想打印4
      cout<<*(*(p+1))<<endl;
      

      因此,如上述解释的,*p是可以看成一个二维指针,其中每个维度的类型为int*[3]类型的指针;

      因此,p[0]指向的就是{1,2,3}组成的大小为3的数组类型的首元素地址;

      同理p[1]指向的就是{4,5,6}组成的大小为3的数组类型的首元素地址;

      即*p一定指向的是一维数组的地址,**p才指向二维数组的地址

相关文章:

  • 【代码随想录】算法训练计划03
  • 8.MySQL内外连接
  • 交换机基础(四):MSTP负载均衡配置案例
  • vue+golang上传微信头像
  • Codeforces Round 905 (Div. 3)ABCDEF
  • python+unittest+requests+HTMLRunner编写接口自动化测试集
  • RDMA概览
  • python版opencv人脸训练与人脸识别
  • LLM系列 | 22 : Code Llama实战(下篇):本地部署、量化及GPT-4对比
  • k8s部署kafka,并使用zookeeper做注册中心
  • cola架构:有限状态机(FSM)源码分析
  • 计算机网络——理论知识总结(上)
  • PlantSimulation访问本地Excel文件的方法
  • CAS 机制的实现原理分析
  • 【tio-websocket】9、服务配置与维护—TioConfig
  • Angular6错误 Service: No provider for Renderer2
  • chrome扩展demo1-小时钟
  • codis proxy处理流程
  • Druid 在有赞的实践
  • Gradle 5.0 正式版发布
  • HashMap剖析之内部结构
  • leetcode46 Permutation 排列组合
  • NSTimer学习笔记
  • SQLServer之索引简介
  • Swift 中的尾递归和蹦床
  • 基于Android乐音识别(2)
  • 前端面试题总结
  • 微服务入门【系列视频课程】
  • 我的面试准备过程--容器(更新中)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • const的用法,特别是用在函数前面与后面的区别
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​插件化DPI在商用WIFI中的价值
  • ​人工智能书单(数学基础篇)
  • ###C语言程序设计-----C语言学习(6)#
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (rabbitmq的高级特性)消息可靠性
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (七)c52学习之旅-中断
  • (七)Knockout 创建自定义绑定
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .equals()到底是什么意思?
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET连接数据库方式
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /dev/sda2 is mounted; will not make a filesystem here!