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

 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
原文地址:https://www.cnblogs.com/richard-c-java/p/3234585.html