zoukankan      html  css  js  c++  java
  • 如何理解二维数组与指针

    一维数组 int a[3]={1,2,3}
    赋值:int *p=a
    我们有  a[0]==*(a+0)==*a
    同样的  a[i]==*(a+i)
    对于一维数组可以理解为 列指针,因为它的移动是发生在列上的

    二维数组:int a[2][3]={{1,2,3},{4,5,6}}
    赋值:int (*p)[3]=a
    而对于二维数组可以把它理解为 行指针
    a 表示的是该二维数组的首地址,也就是第一行的首地址 同样可以表示为a[0]
    a+1 表示的是该二维数组第二行的首地址 同样可以表示为a[1]

    那么如何来理解这个a[0],把a[0]在二维数组中它其实表示的是第一行这个数组的数组名
    就相当于假设  K=a[0],  第一行有元素{1,2,3},那么有 int K[3]={1,2,3}
    也就是说a[0]在二维数组中它就是代表一个一维数组的 数组名

    好了,自己动手做下面的实验,你会更好的理解!

    #include <iostream>
    using namespace std;

    int main()
    {
         int a[2][3]={{1,2,3},{4,5,6}};
         //*a==*(a+0)==a[0]
         //二维数组中a[0]就是代表一个一维数组的名字
         //a[0]与&a[0]在二维数组中是等价的,因为不存在a[0]这个元素
         cout<<a<<" "<<&a<<" "<<*a<<" "<<a[0]<<" "<<&a[0]<<" "<<&a[0][0]<<endl;
         cout<<a+1<<" "<<*(a+1)<<" "<<a[1]<<" "<<&a[1]<<" "<<&a[1][0]<<endl;


         //(a[1]+1)表示的第二行第二列的地址就相当于&a[1][1]
         //在地址前取*号当然是表示它的值了
          //还可以这样来理解: 根据  *(a+i)==a[i] 当然就有*(a[1]+1)=a[1][1] 了,把a[1]看作一个整体
         cout<<"a[1][1]="<<*(a[1]+1)<<endl;
         return 0;
    }
  • 相关阅读:
    Unix UTC时间转化为本地时间的一个MFC实现
    不规则按钮Button修正版
    不规则按钮,支持普通Button,Radio Button, Check Button
    Kimi ga Suki da to Sakebitai
    将adb for visual studio 从26升级29版本
    直到世界的尽头
    Your Song
    Win32创建后台进程
    全金属外壳的歌词
    C#获取本机IP(排除IPV6,仅获取IPV4)的方法转载
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000682.html
Copyright © 2011-2022 走看看