定义a为二维数组后,有三种成份:数组本身、3个一维数组(a的每一行对应一个一维数组)、12个数组元素,

由此就有三种指针及对应的指针变量,

  1. &a和int (*p1)[3][4](没有实用意义)、
  2. &a[i]和int (*p2)[4](当i为0时,&a[0]可简化为a)、
  3. a[i][j]和int *p3;
    由于指针类型匹配是完全匹配,所以初始化形式必须严谨。
    上面有人写出
    int (*p)[4]=&a;
    则是类型不匹配,指向一维数组的指针变量指向了二维数组,尽管有些编译器只给warning、尽管有人认为指针值(二维数组a和一维数组a[0]的地址值)是相同的,事实是类型不匹配、错误
    还有人写出
    int *p = &a[0][0];/*或者int *p = a[0];*/
    这个指针变量是指向数组元素的,没有了数组结构信息,因此用该指针变量访问数组元素时,只能再提供列数信息进行地址计算: *(p+i*列数+j)

结论是 
int (*p)[4]=a;/*或者int (*p)[4]=&a[0]*/
是严格指针类型匹配的,且p具有数组结构信息(列数),可以直接访问数组元素
*(*(p+i)+j)等价于a[i][j]
提供一个小“伎俩”供分析用:指针(变量)左边一个*可等效替换为右边一个[],两个*可等效替换为。。。

上面为引用自CSDN的讨论

写个程序测试一下

   1:  #include <stdio.h>
   2:   
   3:  int main()
   4:  {
   5:      int s[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
   6:      int i, j;
   7:      int (*p)[5] = s;//=&s[0];
   8:      int *q = &s[0][0];
   9:   
  10:      printf("%d ",s[0][0]);
  11:      printf("%d ",*s[0]);
  12:      printf("%d ",**s);
  13:      
  14:      printf("%d ",*(*(p+2)+2) );
  15:      printf("%d ",*(q+12));
  16:  }

转载于:https://www.cnblogs.com/ppazhang/archive/2013/05/23/3094180.html

指向二维数组的指针测试相关推荐

  1. c++17(26)-数组、二维数组的指针、指向数组的指针、指向数组的指针的指针

    #include <iostream> #include <string.h> using namespace std;void setC1(int a[],int size) ...

  2. 二维数组及其指针基础

    编程学习-二维字符串数组的初始化-动态内存分配 动态内存分配 1.堆内存分配 : C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆 (heap)区或自由存 ...

  3. C++ 二维数组和指针数组

    C++ 二维数组和指针数组 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年04月10日 二维数组大家都很清楚,就是该数组包含的元素是一个数组,那么和指针数组又 ...

  4. c++如何打印一维数组首地址_C语言之二维数组和指针的结合

    最近在练习 C 语言计算机二级的程序设计题,碰到了二维数组和指针的结合,当时怎么调试都不对,自己也记不清楚该怎么用了就跑去看书翻资料重新复习.自己纠结的问题是二维数组 int a[3][4]的数组名是 ...

  5. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

  6. C++获取指向二维数组的首元素指针

    假设一个二维数组int a[][4] = { { 3, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };,获取指向其首 ...

  7. 让一维指针指向二维数组空间的方法!

    背景:int *p;int a[10][10];如何让一维指针p指向a[10][10]开辟的内存空间? 正确的方法: 1.开始我用的笨方法是另外开辟一个内存空间int*p=new int [100]; ...

  8. C语言高级编程:二维数组、指针的指针、数组指针、指针数组

    1. 定义 int **p;  指针的指针 int (*p2)[5];  数组指针,指向一个数组 int *array[5];  指针数组,是一个int *类型数组 int array2[3][5]; ...

  9. 二维数组和指针(包含交换二维数组行列)

    有必要对a[i]的性质作进一步说明.a[i]从形式上看是a数组中的第i个元素.如果a是一维数组名,则a[i]代表a数组第i个元素所占的内存单元的内容.a[i]是有物理地址的,是占内存单元的.但如果a是 ...

最新文章

  1. 青源 LIVE 第 28 期 | 北大燕博南:下一代AI芯片—存内计算的硬核与软着陆
  2. What you need to know about AllowUnsafeUpdates (Part 1) [转载]
  3. 购物篮推荐场景太复杂?没有商品相关性标签?看作者运用对比学习统统解决...
  4. Hibernate学习笔记(一)
  5. SpringBoot与数据访问
  6. 软考考前冲刺第十三章UML建模
  7. 大数据每周分享第 008 期
  8. linux系统添加环境变量
  9. SQLAlchemy简单入门
  10. 阴历阳历的相互转换(支持1900~2100年)
  11. html中最小规格字体,font-size【CSS 字体大小】文字大小尺寸
  12. 镜头的MTF曲线分析和原理
  13. USACO3.2.4 Feed Ratios (ratios)
  14. BI_开发_问题:ORA-26002: Table DWH.W_XACT_TYPE_D has index defined upon it.
  15. flume高并发优化——(9)配置文件交由zookeeper管理
  16. 基于Python的岭回归与LASSO回归模型介绍及实践
  17. 洛谷-P2550-彩票摇奖
  18. python爬取网抑云歌曲下载
  19. 最新彩虹Ds网6.0.5最新PJ版程序源码
  20. T-S型模糊算法简述及FPGA的实现

热门文章

  1. python刷题_11.学习Python,刷题才能让你感受到快(差)乐(距)!
  2. linux接口 头文件,第一种:1、添加关键头文件:#include linux/of_gpio.h#include linux/gpio.h...
  3. 智能驾驶板块_智能驾驶股票有哪些?智能驾驶股票一览
  4. sqlmap绕过d盾_Waf功能、分类与绕过
  5. 笔记本电脑电源已接通未充电_dell xps15 电源已接通 未充电 维修方法
  6. 【渝粤教育】电大中专跨境电子商务理论与实务 (9)作业 题库
  7. 【渝粤题库】广东开放大学 物业管理实务 形成性考核 (2)
  8. 【渝粤题库】陕西师范大学163112 旅游管理英语听说 作业 (高起专)
  9. 基于ZigBee 自组网模块的路灯控制网络
  10. 计算机启动完成后操作系统负责管理的是,终极:如果计算机启动后无法进入系统,旧驱动程序会教您如何处理...