• 指针数组与数组指针(C)


    关于数组指针:

    1  对于二维数组,初始化时,必须指定一个参数:   int a [][3] ={{1,2,3},{1,2,3},{1,2,3}}, int a[][] ={} 这样是不允许的,因为要确定指针移动一步要走多远。 对于一位数组int a[] = {},这样可以。也就数说只有一个参数位置可以不用设置参数。

    2   int (*p)[3]      必须加上小括号,这代表一个指向数组的指针,数字3,代表每一列有三个数。这样就定义了一个,二位数组。

    p[0]代表第一行的第一个数的地址,p[1]代表第二行的第一个数的地址,p[2]代表第三行的第一个数的地址,注意与一位数组的

    区别,对于一位数组p[0]代表第一个数字的实际值,而不是地址,但是对于二维数组p[0]代表的却是一个地址,要想得到这个地址的值

    还要加上*号,如:*(p[0]),这代表第一行的第一个数字的实际值,也可以这样表达: a[0][0],这种表达方式就与一维数组的表达方式一样了。a[0][0] 就相当于 *(*(a+0)+0) ,  相当于 *(a+0)[0], 相当于*(a[0]+0), 全都是在表达二位数组的第一行的第一个数的实际值,而不是地址值。

    总结: 二位数组的指针的使用方式依旧是从一位数组的指针的使用方式来的,即:在一维数组中a[0]=*(a+0),

    在二维数组中a[0]已经不再表示实际值了,而是表示地址值,但是a[0][0]=*(*(a+0)+0), 依旧表示的是实际值而不是地址,这还是相当于一维数组。

    #include<stdio.h>
    int main()
    {
        int a[][2]={{1,2},{3,4}};
        printf("1这是第一行第一个元素的值:%d
    ",a[0][0]);
        printf("2这是第一行第一个元素的值:%d
    ",*(*(a+0)+0));
        printf("3这是第一行第一个元素的值:%d
    ",(*(a+0))[0]);
        printf("4这是第一行第一个元素的值:%d
    ",*(a[0]+0));
        printf("-------------
    ");
        printf("这是第一行第一个元素的地址:%d
    ",a[0]);
        printf("这是第一行第一个元素的数值:%d
    ",*(a[0]));
    
        return 0;
    }

    关于指针的数组:

    int * a[2]      代表着指针的数组, 2 代表着 指针每走一步,向前走多远。

    int b[][2]={{1,2},{1,2}}

    a[0] = b[0]         存放着二维数组b 的第0行的第0个元素的地址,注意b[0] 代表的是地址,而不是实际值

    a[1] = b[1]          存放着二维数组b第一行的第一个元素的地址,注意b[1]代表的是地址,而不是实际值。

    #include<stdio.h>
    int main()
    {
        int *a[2];
        int b[][2] = {{1,2},{3,4}};
        a[0] = b[0];   //第一个行第一个元素的地址
        a[1] = b[1];    //第二行第一个元素的地址
        printf("%d
    ",a[0]);  //打印地址值
        printf("%d
    ",a[1]);
        printf("%d
    ",*(a[0])); //打印实际值
        printf("%d
    ",*(a[1]));
    
        return 0;
    }
    
    // conclusion  关于指针的数组 int a[2],必须指明有几个元素,不同于一位数组。

  • 相关阅读:
    十一、GUI设计-记事本程序
    十、GUI编程
    OSI七层模型中各层的数据名称
    使用了frame的页面如何整体进行跳转,而不是仅frame跳转
    MySQL脏读、不可重复读、幻读
    博客园后台搜索自己的博客
    完整的ELK+filebeat+kafka笔记
    InnoDB引擎中的索引与算法
    Docker pull下载出现 error pulling image configuration:
    多台服务器通过docker搭建ELK集群
  • 原文地址:https://www.cnblogs.com/zijidefengge/p/12499567.html
Copyright © 2020-2023  润新知