数组指针(二维数组的指针)

    添加时间:2013-5-3 点击量:

     1 #include <iostream>
    
    2
    3 using namespace std;
    4
    5
    6 int main()
    7 {
    8 int v[2][2]={{12},{34}};
    9 cout<<v = <<v<<endl;
    10 cout<<v = <<v<< &v = <<&v<<endl;
    11 cout<<v+1 = <<v+1<<endl;
    12 cout<<(v+1) = <<(v+1)<< &v[1] = << &v[1]<<endl;
    13 cout<<v[0] = <<v[0]<< &v[0] = << &v[0]<<endl;
    14 cout<<endl;
    15
    16 cout<<v = <<v<<endl;
    17 cout<<(v+1) = <<(v+1)<<endl;
    18 cout<<(v+1) = <<(v+1)<<endl;
    19 cout<<(v[0]+1) = <<(v[0]+1)<<endl;
    20 cout<<(v[1]) = <<(v[1])<<endl;
    21
    22 return 0;
    23 }


    运行成果为:



    v = 0012FF50
    v = 0012FF50 &v = 0012FF50
    v+1 = 0012FF54
    (v+1) = 0012FF58 &v[1] = 0012FF58
    v[0] = 0012FF50 &v[0] = 0012FF50


    v = 1
    (v+1) = 3
    (v+1) = 2
    (v[0]+1) = 2
    (v[1]) = 3



    由此看出,v默示数组首地址,v默示第一行数组的首地址,那么v+1则默示在数组第一行一个元素根蒂根基上移动sizeof(int)。而v+1默示移动一个数组大小,移动到第二行的首个元素。即,对于一个二维数组来说,v,v+1都是对于二维数组而言的,在其上的移动操纵是以行动单位。若想获得元素的值,必须解引用两次。解引用一次,把它们转换为一个一维数组。


    同样的,v[0],v[1]默示第一行,第二行首元素地址。v[0],v[1]可以看做一个一维数组,他们是响应行的首地址。


    这里趁便提一下,对于一维数组来说,数组名本身就是指针,在加一个&,就变成了双指针,这里的双指针就是二维数组,加1,就是数组整体加一行,即最后一个元素的下一个元素(固然并不存在)。


    例如:



    1 int a[]={123};
    
    2 int ptr=(int)(&a+1);
    3 cout<<(ptr-1)<<endl;


    输出成果为:3.

    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: