zoukankan      html  css  js  c++  java
  • 指针与数组

    定义二维数组 a[m][n]

    直接寻址 = 间接寻址

    a[i][j]  = *(*(a+i)+j)

    说明:

    抽象意义:

    a+i:二维平面内,第i行的地址

    *(a+i)+j:行内的第j个元素的地址  #找到元素的地址,用*间接寻址

    逻辑意义:

    a+i 第i行的首地址,即a[i],意义上不同于&a[i][0],但地址相同,即 行的地址=行首元素地址 

    *(a+i)+j 表示第i行的第j各元素的地址,即&a[i][j]

    *(*(a+i)+j)即为间接寻址,表示a[i][j]

    地址计算公式:

      Loc(i, j) = a0 + (i*n + j)*sizeof(int) #按行存储,多数情况

      Loc(i, j) = a0 + (j*m + i)*sizeof(int) #按列存储,少见

      说明:

        1、a0表示首元素地址&a[0][0],此公式可用于计算a[i][j]的地址(base16)

        2、特殊情况下,间接寻址方式可以在此公式的基础上使用,转 间接寻址

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int ib[3][4];
     7     cout<<"ib="<<ib<<endl;
     8     cout<<"----&ib[i][j]---"<<endl;
     9     for(int i=0; i<3; i++)
    10     {
    11         for(int j=0; j<4; j++)
    12             cout<<&ib[i][j]<<"  ";
    13         cout<<endl;
    14     }
    15     cout<<"----ib+i----"<<endl;
    16     for(int i=0; i<3; i++)
    17         cout<<"ib+"<<i<<"="<<ib+i<<endl;
    18     cout<<"----*(ib+i)----"<<endl;
    19     for(int i=0; i<3; i++)
    20         cout<<"*(ib+"<<i<<")="<<*(ib+i)<<endl;
    21     cout<<"----*(ib+i)+j----"<<endl;
    22     for(int i=0; i<3; i++)
    23     {
    24         for(int j=0; j<4; j++)
    25             cout<<"*(ib+"<<i<<")+"<<j<<"="<<*(ib+i)+j<<"  ";
    26         cout<<endl;
    27     }
    28     cout<<"Loc(i,j)公式计算:(错误的方法)"<<endl;//错误的寻址方法
    29     for(int i=0; i<3; i++)
    30     {
    31         for(int j=0; j<4; j++)
    32             cout<<*(ib+(4*i+j)*sizeof(int))<<" ";
    33         cout<<endl;
    34     }
    35     return 0;
    36 }

    同理:

    定义三维数组 a[p][m][n]

    a[i][j][k] = *( *( *(a+i) +j) +k)

    说明:

    抽象意义:

    a+i:在空间内,表示第i个面的地址

    *(a+i)+j:进入面内,表示第j行的地址

    *(*(a+i)+j)+k:进入行内,表示行的第k个元素的地址  #找到元素的地址,用*间接寻址

    逻辑意义:

    a+i  表示第i个“面”的地址,即 a[i]

    *(a+i)+ j  得到第i个“面”的第j“行”的地址,即a[i][j]

    *(*(a+i)+ j)+ k  得到第i个“面”的第j“行”的第k个元素的地址,即&a[i][j][k]

    *(*(*(a+i)+j)+k) 得到第i个“面”的第j“行”的第k个元素,即a[i][j][k]

    理解:

    三维数组是一种多个平面组成的特殊的二维数组

    A[p][m][n] = p * a[m][n]

    抽象意义上,p在空间上表示前后有几个面,m表示每一个面上的行数,n表示每一行的列数

  • 相关阅读:
    php 获取上上个月数据 使用 strtotime('-1 months')的一个bug
    mysql ON DUPLICATE KEY UPDATE 用法
    在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5 ,PHP5.6)支持。
    Window7 环境下 MariaDB 的安装 及使用
    memcache和memcached之间的区别和联系
    基于bootstrap + php +ajax datatable 插件的使用
    daterangepicker+ bootstrap +php +ajax +datatable双日历的使用
    基于bootstrap 的datatable插件的使用2(php版)
    CI 框架导出文件
    MYSQL中replace into的用法
  • 原文地址:https://www.cnblogs.com/guoyujiang/p/11715404.html
Copyright © 2011-2022 走看看