• 指针与数组


    定义二维数组 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表示每一行的列数

  • 相关阅读:
    【蓝桥杯】基础练习 十六进制转十进制
    【蓝桥杯】 基础练习 十六进制转八进制
    【蓝桥杯】 入门训练 序列求和
    【蓝桥杯】 入门训练 圆的面积
    【蓝桥杯】入门训练 Fibonacci数列
    6次考试小结
    搜索
    sudoku
    生日蛋糕
    木棒
  • 原文地址:https://www.cnblogs.com/guoyujiang/p/11715404.html
Copyright © 2020-2023  润新知