您的位置:首页 > 其它

数组名与指针的关系?

2016-12-05 11:32 162 查看
一维数组的单位是元素,一维数组名代表首个元素的地址

二维数组的单位是一维数组,二维数组名代表首个一维数组的地址
为了方便理解,定a一维数组 aa二维数组 aaa三维数组

对于整型一维数组a来说:

   a : 数组名,表示指针常量,保存数组首元素的地址,是一个常量,不         可以进行自加操作。
&a 代表数组的地址

对一维数组名取地址等于一维数组的地址;

对数组的地址取值等于等于一维数组的首元素的地址
对于二维数组来说,定义时不能省略列,可以省略行。
    aa + i :第i+1个一维数组的地址

   *(aa+i):第i+1个一维数组的首元素的地址

   *(aa+i)+j:第i+1个一维数组的第j+1个元素的地址

   *(*(aa+i)+j):第i+1个一维数组的第j+1个元素的值

   

    &aa:对二维数组名取地址等于二维数组的地址

    *(&aa) = aa:对二维数组的地址取值等于首个一维数组的地址

    **(&aa) == *aa:对二维数组的首个一维数组的地址取值等于二维数组    首个一维数组的首元素的地址
对于三维数组来说:

     &a:三维数组的地址

    a:三维数组的数组名,也就是首个二维数组的地址

    *a: 首个二维数组的首个一维数组的地址

    **a:首个二维数组的首个一维数组的首元素的地址

    ***a:首个二维数组的首个一维数组的首元素的值
        *(*(*(a + i) + j) + k);

        a + i:第i + 1个二维数组的地址

        *(a + i):第i + 1个二维数组的首个一维数组的地址

        *(a + i) + j:第i + 1个二维数组的第j + 1个一维数组的地址

        *(*(a + i) + j):第i + 1个二维数组的第j + 1个一维数组的首元          素的地址

        *(*(a + i) + j) + k:第i + 1个二维数组的第j + 1个一维数组的          第k + 1个元素的地址

        *(*(*(a + i) + j) + k):第i + 1个二维数组的第j + 1个一维数          组的第k + 1个元素的值
数组名当形参的时候,编译器将它当成指针看待的(强制类型转换),传一维数组名是用元素的指针来接,传二维数组名是用一维数组的指针来接,
a[3]

传一维数组名用元素的指针来接   int *a

a[2][2]

传二维数组名用一维数组指针来接  int (*a)[2]

a[3][2][2]

传三维数组名用二维数组指针来接   int (*a)[2][2]
数组指针什么时候用? 函数传参的时候用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息