一、首先我们从字面意思理解一下什么是指针数组什么是数组指针
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. 每日一九度之 题目1033:继续xxx定律

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5502 解决:1351 题目描述:     当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数, ...

  2. Spark函数

    这张图不错!

  3. app缓存设计-文件缓存

    采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓 ...

  4. C#中八皇后问题的递归解法——N皇后

    百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...

  5. C# .ToString() 格式化

    c# ToString() 格式化字符串  格式化数值:有时,我们可能需要将数值以一定的格式来呈现,就需要对数值进行格式化.我们使用格式字符串指定格式.格式字符串采用以下形式:Axx,其中 A 为格式 ...

  6. 微软DbHelper

    using System; using System.Configuration; using System.Data; using System.Data.Common; using System. ...

  7. phpcms 04

    首页index.html 首页头条推荐 <div class="col-left"> <div class="news-hot"> &l ...

  8. AIM Tech Round 3 (Div. 2) B

    Description Vasya takes part in the orienteering competition. There are n checkpoints located along ...

  9. linux系统中如何查看日志 (常用命令2)

    cat tail -f 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关 ...

  10. Update与FixedUpdate区别

    以下的代码能使游戏暂停,记得要使速度*Time.deltaTime,目的是保证游戏运行在帧数不同的情况下,角色移动速度都一样,因为此时角色是按时间移动与帧数无关. using UnityEngine; ...