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;
    }
  • 相关阅读:
    最近积累的JS 东西,分享一下
    C#定时任务框架Quartz.NET
    如何成为微软社区MVP以及年终总结
    git 基于某个分支创建分支
    iframe跨域-Js通信的一种方式
    tcp连接建立断开过程及状态变化
    MySQL-InnoDB的事务隔离与锁
    MySQL索引原理总结
    php gd实现简单图片验证码与图片背景文字水印
    php 取post数据的三种方式
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000682.html
Copyright © 2011-2022 走看看