zoukankan      html  css  js  c++  java
  • 二维数组是二级指针pointer to pointer!

    二维数组居然是个类似于二级指针(pointer to pointer)的东西,十分震惊!

     1 #include <stdio.h>
     2 int main()
     3 {
     4 int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
     5 printf("&a:%d,&a[0]:%d 
    ",&a,&a[0]);
     6 printf("a:%d,a[0]:%d 
    ",a,a[0]);
     7 printf("*a:%d,*a[0]:%d 
    ",*a,*a[0]);
     8 printf("**a:%d 
    ",**a);
     9 return 0;
    10 }

    运行结果:

    &a:2686672,&a[0]:2686672
    a:2686672,a[0]:2686672
    *a:2686672,*a[0]:1
    **a:1

    由此可见 a[0][0]是一个整型变量,a[0]是一个指针(pointer),a是个二级指针(pointer to pointer)

    并且a,a[0],a[0][0]的地址是相同的,但a依然是指向a[0]地址的指针,a[0]依然是指向a[0][0]的指针

    因此二维数组的操作也变复杂点了,以下一道题用以验证及训练

    设有如下数组定义: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设一个int类型数占四个字节)。

    (1)a[2][1]		(2)a[1]		(3)a			(4)a+1
    (5)*a+1		(6)*(a+1)	(7)a[2]+1		(8)*(a+1)+1
    (9)*(*(a+2)+2) 

    1 #include <stdio.h>
    2 int main()
    3 {
    4     int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    5     printf(" a[1]:%d 
     a:%d 
     *a:%d 
     a+1:%d 
     *a+1:%d 
     *(a+1):%d 
     a[2]+1:%d 
     *(a+1)+1:%d 
    ",a[1],a,*a,a+1,*a+1,*(a+1),a[2]+1,*(a+1)+1);
    6     printf(" *(*(a+2)+2):%d 
    ",*(*(a+2)+2));
    7     return 0;
    8 }

    运行结果:

    a[1]:2686688
    a:2686672
    *a:2686672
    a+1:2686688
    *a+1:2686676
    *(a+1):2686688
    a[2]+1:2686708
    *(a+1)+1:2686692
    *(*(a+2)+2):21

    小结:

    二级指针 指针     整型变量

    a    →    a[0] → a[0][0]

                a[1] → a[1][0]

                a[2] → a[2][0]


    可以推广到一维数组就是一个指针,三维数组是个三级指针了

    验证一维数组是指针(pointer)

    1 #include <stdio.h>
    2 int main()
    3 {
    4     int a[3]={1,2,3};
    5     printf("&a:%d,&a[0]:%d 
    ",&a,&a[0]);
    6     printf("a:%d,a[0]:%d 
    ",a,a[0]);
    7     printf("*a:%d 
    ",*a);
    8     return 0;
    9 }

    运行结果:

    &a:2686708,&a[0]:2686708
    a:2686708,a[0]:1
    *a:1

  • 相关阅读:
    【WPF】WPF Behavior 行为 实现鼠标移入按钮自动旋转
    cgo遇到的几个坑
    工程师什么时机最合适选择跳槽?
    在 ASP.NET Core 中自动启用 CAP 事务
    轻量级压力测试工具http_load
    纯C语言AES-128(可修改)-ECB模式加密-zero模式
    内存字符串暴力搜索定位代码
    windbg配置网络版双机调试
    安装docker compose
    linux安装基础软件包
  • 原文地址:https://www.cnblogs.com/someblue/p/3364479.html
Copyright © 2011-2022 走看看