• 关于一位数组以及二维数组数组名的地址特性


     1 //**************************此为一维数组*********************************
     2 #include<iostream.h>
     3 #include<iomanip.h>
     4 
     5 void main()
     6 {
     7     int a[10];
     8     int* b=a;
     9 
    10     int n,m;
    11     n=sizeof(a);
    12     cout<<"n="<<n<<endl;
    13 
    14     m=sizeof(b);
    15     cout<<"m="<<m<<endl;
    16     
    17     cout<<"a: "<<(int*)a<<endl;
    18 
    19     cout<<"*a: "<<*a<<endl;
    20     cout<<"a[0]: "<<a[0]<<endl;
    21         
    22     for(int i=0;i<10;i++)
    23     {
    24         *(a+i)=i*3;
    25     }
    26 
    27     for(i=0;i<10;i++)
    28         cout<<setw(5)<<a[i];
    29     cout<<endl;
    30 
    31     for(i=0;i<10;i++)
    32         cout<<setw(5)<<*b++;//又出错了,数组名为const指针,不进行自加操作;
    33 
    34     cout<<endl;
    35 
    36     cout<<(int*)a<<endl;//0x0012FF58;(程序运行后的输出结果)
    37     cout<<(int)a<<endl;//1245016;(程序运行后的输出结果)
    38     cout<<a<<endl;//0x0012FF58;(程序运行后的输出结果)
    39 
    40 
    41 }

    运行结果如下:
    n=40
    m=4
    a: 0x0012FF58
    *a: -858993460
    a[0]= -858993460
      0 3 6 9 12 15 18 21 24 27
      0 3 6 9 12 15 18 21 24 27
    0x0012FF58
    1245016
    0x0012FF58

    ===================================================================================================

    //******************************二维数组**************************************
    #include<iostream.h>
    #include<iomanip.h>
    
    void main()
    {
        static int a[3][3];
        int i,j;
        int* pr=(int*)a;//这里的赋值,a不行(需要加上强制转换(int*)才行),a[0]可以,&a[0][0]可以;
    
        cout<<"a[0]="<<a[0]<<endl
            <<"a="<<a<<endl
            <<"&a[0][0]="<<&a[0][0]<<endl
            <<"a[1]="<<a[1]<<endl
            <<"&a[1][0]="<<&a[1][0]<<endl
            <<"a+1="<<a+1<<endl
            <<"a[1]+1="<<a[1]+1<<endl
            <<"&a[1][1]="<<&a[1][1]<<endl
            <<"a+2="<<a+2<<endl
            <<"sizeof(a[0])="<<sizeof(a[0])<<endl
            <<"sizeof(a)="<<sizeof(a)<<endl;
    
        
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                a[i][j]=i*10+j;
                cout<<setw(5)<<a[i][j];
            }
            cout<<endl;
        }//====================================================》赋值并且输出;
    
    
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
                cout<<setw(5)<<*pr++;
    
            cout<<endl;
        }//===================================================》这里可以运行通,说明二维数组的内存是连续的;
    
    
    }

    运行结果:
    a[0]=0x0042E058
    a=0x0042E058
    &a[0][0]=0x0042E058
    a[1]=0x0042E064
    &a[1][0]=0x0042E064
    a+1=0x0042E064
    a[1]+1=0x0042E068
    &a[1][1]=0x0042E068
    a+2=0x0042E070
    sizeof(a[0])=12
    sizeof(a)=36
      0   1   2
     10  11  12
     20  21  22
       0   1   2
     10  11  12
     20  21  22

    对二维数组的情况进行总结:

          地址(16进制)
    a a[0] &a[0][0] 0x0042E058
    a+1 a[1] &a[1][0] 0x0042E064
    a+2 a[2] &a[2][0] 0x0042E070
      a[1]+1 &a[1][1] 0x0042E068
  • 相关阅读:
    1108递归
    1108JS函数
    1107数组例子
    1106JS循环
    1106JS数组
    1104JS语法
    1104JS循环
    PDO概念 分析 练习
    Jquery网页元素里面的操作以及JSON
    Jquery事件
  • 原文地址:https://www.cnblogs.com/richard-c-java/p/3234585.html
Copyright © 2020-2023  润新知