数组名与指针的关系?

来源:互联网 发布:淘宝店铺插件 编辑:程序博客网 时间:2024/05/23 19:08
一维数组的单位是元素,一维数组名代表首个元素的地址
二维数组的单位是一维数组,二维数组名代表首个一维数组的地址
为了方便理解,定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]
数组指针什么时候用? 函数传参的时候用。
1 0
原创粉丝点击