zoukankan      html  css  js  c++  java
  • (一)二维数组&&指针数组与数组指针

    一、首先我们从字面意思理解一下什么是指针数组什么是数组指针
    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. ", a[1][3]);
        printf("a[1][3] = %d. ", *(*(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. ", *(*(p3+0)+3));
        printf("a[1][4] = %d. ", *(*(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. ", *(p4+4));
        int *p6 = a[1];
        printf("a[1][1] = %d. ", *(p6+1)); // 指向二维数组的第二维
        return 0;
         }
  • 相关阅读:
    最近半年
    CentOS 6.4和Eclipse Juno CDT(4.2.2)的bug
    cygwin/X XDMCP连接CentOS
    手把手教你emacs cedet C/C++自动补全
    ProFont – 识别度极高的终端字体
    ACE之旅——环境搭建、HelloWorld
    静态链表在优化中的应用
    ACE之旅——第一个ACE通讯程序daytime
    ThinkPHP 自定义标签测试 冰糖
    FreeTextBox使用详解 (版本3.1.1)
  • 原文地址:https://www.cnblogs.com/zhangshenghui/p/5327924.html
Copyright © 2011-2022 走看看