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;
    }
    
  • 相关阅读:
    Flex上传文件报“Error #2038”
    AMQ9558
    perl 运算符
    linux gdm 远程桌面访问
    perl 捕获变量
    android apk嵌套 从一个apk启动另外一个apk
    apk调用另一个apk
    ORA-01591 锁被未决分布式事务处理
    jQuery事件控制点击内容下拉
    作业还是作孽?——Leo鉴书79
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626173.html
Copyright © 2011-2022 走看看