zoukankan      html  css  js  c++  java
  • 指针与数组的关系(一维、二维)

    一、指针和一维数组间的关系

    前提条件:

    int a[10];//元素个数随意自己定
    int *p = a;//定义指针时直接初始化,也可以分为两步:int *p; p=a;
    

    第i个元素的地址:

    &a[i]    等价于    a+i    等价于    &p[i]    等价于    p+i
    

    第i+1个元素的值:

    a[i]    等价于    *(a+i)    等价于    p[i]    等价于    *(p+i)
    

    二、指针和二维数组间的关系

    前提条件:(对于二维数组)

    int a[2][3];//2行3列
    
    行地址:
    a表示二维数组的首地址,第0行的地址
    a+i代表第i行的地址,但并非增加i个字节
    
    列地址:
    a[i] 或 *(a+i) 代表第i行第0列的地址
    a[i]+j 或 *(a+i)+j 或 &a[i][j] 代表第i行第j列的地址
    
    行指针指向的内容:
    *(*(a+i)+j) 或 a[i][j] 代表第i行第j列的内容
    
     列指针指向的内容:
    *(a+i*n+j) 或 a[i*n+j] 或 a[i][j] 代表第i行第j列的内容
    

    二维数组的行指针:(逐行查找,逐列查找)

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int a[2][3]={{1,2,3},{4,5,6}};
        int (*p)[3];//(*p)[i]:是定义一个指向含有i个元素的数组的指针,不过要注意,这里“i”应该是一个常量
                    //*p[i]:定义元素类型是指针的数组,同样的“i”应该是整型
        p=a;//用行地址初始化
        for(int i=0;i<2;++i)
        {
            for(int j=0;j<3;++j)
                cout<<*(*(p+i)+j)<<" ";
            cout<<endl;
        }
        return 0;
    }
    

    二维数组的列指针:(逐个查找,相对偏移量)

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int a[2][3]={{1,2,3},{4,5,6}};
        int *p;
        p=*a;
        for(int i=0;i<2;++i)
        {
            for(int j=0;j<3;++j)
                cout<<*(p+i*3+j)<<" ";
            cout<<endl;
        }
        cout<<endl;//另外一种表示方法
        for(int i=0;i<2;++i)
        {
            for(int j=0;j<3;++j)
                cout<<p[i*3+j]<<" ";
            cout<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    我眼中的DevOps
    Jenkins常用插件介绍之权限控制插件Role-based Authorization Strategy
    sql查询一个班级中总共有多少人以及男女分别多少人
    win8 图片等路径
    WPF 设置TextBox为空时,背景为文字提示。
    WCF服务发布
    win8 摄像
    oracle 删除主键
    oracle 数据库连接
    oracle 创建用户表
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626173.html
Copyright © 2011-2022 走看看