一、首先我们从字面意思理解一下什么是指针数组什么是数组指针
1、指针数组:本质是一个数组,数组中的每一个元素是一个指针。
2、数组指针:本质是一个指针,而指针指向一个数组。
二、我们该怎么区分指针数组和数组指针?
1、总共有三种表示形式:int * P[4]和int (*P)[4]和int *(P[4]),表面看起来是不是很难区分?
      一般规律:int *P是一个指针,int P[4]是一个地址,因此我们在区分指针数组时首先要清楚你找的对象是谁(找核心),其次我们找谁与核心最先结合(找结合)。第三步         继续往外扩展,知道整个符号结合完毕。
2、找核心很容易,我们该怎么找结合呢?这个主要看的是优先级,在这里我们查看C语言符号优先级。
  我们看到C语 言运算符中[ ]运算符优先级最高,其次是( ),再其次才是 * ,因此int *P[4],[ ]优先级最高,P先于[ ]结合,因此int *P[4]本质上是一个数组,其次P数组才会与*结合,因此我们就知道了int *P[4]是一个指针数组。而int (*P)[4]是一个数组指针,因为核心是P,P先于( )结合,其次才会与[ ]结合。以此类推int *(P[4]是一个指针数组),它与int *P[4]等价。
三、二维数组与指针
1、二维数组的定义:
      int Array_a [2][3]={1,2,3,4,5,6};或者int Array_a[2][3]={{1,2,3},{4,5,6}};
2、指针与数组的关系
      int Array_a[2][3]={1,2,3,4,5,6};我们有两种方法访问Array_a数组中的某个元素,比如我们访问第三个元素,Array_a[0][2]或者*(*(Array_a+0)+2)
      注意:Array_a、&Array_a[0]、Array_a的区别:
      #include <stdio.h>
      int main(void)
     {
    int a[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
    //int a[2][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    printf("a[1][3] = %d.\n", a[1][3]);
    printf("a[1][3] = %d.\n", *(*(a+1)+3));
    //int *p1 = a;// 类型不匹配
    //int **p2 = a;// 类型不匹配
    // 指针指向二维数组的数组名
    int (*p3)[5];  // 数组指针,指针指向一个数组,数组有5个int类型元素
    p3 = a;  // a是二维数组的数组名,作为右值表示二维数组第一维的数组
    // 的首元素首地址,等同于&a[0]
    p3 = &a[0];
    printf("a[0][3] = %d.\n", *(*(p3+0)+3));
    printf("a[1][4] = %d.\n", *(*(p3+1)+4));
    // 指针指向二维数组的第一维
    //int *p4 = &a[0];// 不可以
    int *p4 = a[0];// a[0]表示二维数组的第一维的第一个元素,相当于是
    // 第二维的整体数组的数组名。数组名又表示数组首元素
    // 首地址,因此a[0]等同于&a[0][0];
    int *p5 = &a[0][0];
    printf("a[0][4] = %d.\n", *(p4+4));
    int *p6 = a[1];
    printf("a[1][1] = %d.\n", *(p6+1)); // 指向二维数组的第二维
    return 0;
     }

(一)二维数组&&指针数组与数组指针的更多相关文章

  1. Qt信号槽机制的实现(面试的感悟,猜测每一个类保存的一个信号和槽的二维表,实际使用函数指针 元对象 还有类型安全的检查设定等等)

    因为面试时问了我这道题,导致我想去了解信号槽到底是如何实现的,于是贴着顺序看了下源码,大致了解了整个框架.网上关于信号槽的文章也很多,但是大部分都是将如何应用的,这里我就写一下我所理解的如何实现吧, ...

  2. [poj2155]Matrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25004   Accepted: 9261 Descripti ...

  3. JavaScript -- 定义二维数组

    方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],["1-1"," ...

  4. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  5. 二维码开源库ZBar-MDK STM32F429移植

    前两篇文章已经实现ZBar在Windows平台下的编译和使用,本文将介绍如何把ZBar移植到STM32F429,IDE使用MDK. 1. MDK工程设置 (1)不勾选Use MicroLIB ,使用I ...

  6. 使用zxing生成二维码

    public static Bitmap Create2DCode(String str) throws WriterException {                 // 生成二维矩阵,编码时 ...

  7. ios-深度解析二维码的生成与使用

    利用一个小demo来对二维码进行学习,总共四个界面(主界面,生成二维码界面,识别二维码界面,扫描二维码界面)   一.二维码的介绍   1.什么是二维码?        二维条码/二维码是用某种特定的 ...

  8. Java生成带小图标的二维码-google zxing 工具类

    近期一直忙于开发微信商城项目,应客户要求,要开发个有图标的二维码.经过两次改版,终于实现了该功能(第一次没有小图标,这次才整合好的),如下是完整代码 . 该代码使用Java7开发,另外使用 core- ...

  9. 提高zxing生成二维码的容错率及zxing生成二维码的边框设置

    最近做了一个项目要生成二维码,跟几年前不同,最近大家都喜欢在二维码中间加logo. 加logo倒是不难,两个图片叠一起就是了,但是遇到一个新问题,logo加得太大的话,会导致二维码扫描不出来;加的太小 ...

  10. Android自由行之走进zxing,轻松实现二维码扫描

    现在很多App都集成了扫一扫功能,最常用的微信.QQ.手机助手等.二维码也使得生活变得更加简洁,扫一扫订餐.扫一扫下载等等.那么,说到二维码,我们不得不提Google一个开源的扫码框架:zxing. ...

随机推荐

  1. 20145227 《Java程序设计》第2周学习总结

    20145227 <Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 1.基本类型:在java中基本类型主要分为整数.字节.浮点数.字符与布尔. 整数:分为s ...

  2. android5.0 编译

    android5.0编译需要jdk1.7版本,将来本地可能需要同时维护两套jdk版本,请参考: 在线安装openjdk1.7 sudo apt-get install openjdk-7-jre op ...

  3. E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方案

    转载自:http://www.cnblogs.com/eddy-he/archive/2012/06/20/2555918.html cd /var/lib/dpkg sudo mv info inf ...

  4. ExecutorService - 10个技巧和窍门

    ExecutorService已经成为Java并发编程中常用的基础库,几乎所有到线程 任务等执行都要委托ExecutorService.下面是使用过程中10个技巧和窍门. 1.为线程池和线程取名 当我 ...

  5. require.js的简单使用

    <script src="js/require.js"></script> <script src="js/require.js" ...

  6. php基础复习(3)文件上传于下载

    一. 客户端配置: 表单页面 表单的发送方式是post 添加enctype = “multipart/form-data”   <form action="doaction.php&q ...

  7. MySQL中别名的使用

    MySQL中别名的使用 为数据列或者表达式起别名时,别名紧跟数据列,中间以空格隔开,或者用关键字as隔开. #为表达式起别名 使用as关键字隔开 as T_ID from teacher_table; ...

  8. Python3基础 while配合random输出10个随机整数

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  9. SqlSever基础 over与avg配合,将平均值添加到原表的右侧,并为新列起名

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  10. BZOJ 2324 营救皮卡丘(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2324 题意:n+1个城市(0到n).初始时K个 人都在0城市.城市之间有距离.要求(1) ...