zoukankan      html  css  js  c++  java
  • 关于c/c++中的二维数组与指针

      设a是一个一维数组的数组名,则a表示其第一个元素的地址(即&a[0]),而&a表示整个数组的地址!尽管两者值相同(&a[0]==&a),因此&a是地址,*(&a)也是地址,**(&a)是第一个元素(见c++pp第245,246页和c第192页)

    将非const值赋给const变量是合法的,反之是非法的,因此,在函数声明中形参应尽可能使用const,这样无论const和非const实参都能传递给函数(c++pp263页)

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int x[4][3]={1,2,3,99,5,6,7,8,9,10,11,12};
    
        int (*p)[3] = x;  //在声明的时候,这里指p是这样一种指针类型:(*)[3],即指向3个int的指针(每次自增1的长度为3个int的长度)。不要做其他理解!!
    
        cout << x << endl;
        cout << (*p)[3] << endl;
        cout << *p[3] << endl;  // []的优先级高于*,所以先解释为p[3],即*(p+3),而p是指向3个int的指针,所以p+3指向{10,11,12}(即保存{10,11,12}的地址),所以*(p+3)(即p[3])为10的地址,所以*p[3](即*(*(p+3)))为10
        cout << *(*(p+3)) << endl;
    
        int a[2][3]={{1,2,3},{4,5,6}};
        int  i,j;
        int (*k)[3];
        k = a;
        cout << "a:" << a <<endl;
        cout <<"&a[0][0]: " << &a[0][0] << endl;
        cout << "k: " << k << endl;  // 第一个一维数组的地址!!
        cout << "k+1: " << (k+1) << endl;  //第二个一维数组的地址!!
        cout << "k+1: " << *(k+1) << endl;
        cout << "*k: " << *k << endl;  // 第一个一维数组的第一个元素的地址!!
        cout <<  "**k: " << **k << endl;  // 第一个一维数组第一个元素
        // 综上所述,就像一维数组一样,设a是一个一维数组的数组名,则a表示其第一个元素的地址(即&a[0]),而&a表示整个数组的地址!!尽管两者值相同(&a[0]==&a),因此&a是地址,*(&a)也是地址,**(&a)是第一个元素(见c++pp第245,246页和c第192页)
        for (i=0;i<2;i++)
        {
            cout << "k[i]: " << k[i] << endl;
            for (j=0;j<3;j++)
                cout << k[i][j] << "##" << &k[i][j] << endl;
        }
    
        return 0;
    }
  • 相关阅读:
    C#异步编程由浅入深(一)
    基于Jira的运维发布平台的设计与实现
    kubeadm部署K8S并使用containerd做运行时
    代码阅读
    黑客攻防 1
    Linux 常用指令篇1
    期刊管理系统总结
    docker安装RabbitMQ
    Centos7安装mysql8.0教程
    java动态编译
  • 原文地址:https://www.cnblogs.com/tan-wm/p/11623275.html
Copyright © 2011-2022 走看看