c语言数组总结

1、一维数组

一维数组是顺序排列,以数组a[4]为例 &a代表整个数组的地址,数组名a则代表第一个元素的地址。

2、二维数组

二维数组虽然也是顺序排列,但是因为多了一个维数,所以其地址的增加顺序为先增加列再增加行。

把下列代码参透,你就可以完全掌握二维数组

int main(void)
{
    int i;
    int a[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
    int *p = &a[0][0];
    for(i=0;i<12;i++)

    {
        printf("%d,%p  ",*(p+i),p+i);
        if((i+1)%4 == 0)
            printf("\n");
    }
    printf("----------------------------\n");
    printf("a = %p\n",a);                      //a是一个行地址,这里代表第一行的首地址
    printf("a[0] = %p\n",a[0]);                //a[0]是一个行地址与a相同,这里代表第一行的首地址
    printf("&a[0] = %p\n",a[0]);               //&a[0]是一个行地址与a相同,这里代表第一行的首地址
    printf("*a = %p",*a);                      //*a指向第一个数据的地址  *(a+0)+0 = a[0]+0
    printf("&a[0][0] = %p\n",&a[0][0]);        //&a[0][0]是第一个元素的地址,这是代表第一个元素的地址
    printf("&a = %p\n",&a);                    //&a是整个数组的地址
    printf("----------------------------\n");
    printf("*a + 1= %p\n",*a + 1);               //*a+1指向第二个数据的地址 等价于*(a+0)+1 *(a+0) = a[0]
    printf("&a[0][0] + 1 = %p\n",&a[0][0] + 1);//&a[0][0]+1,这里代表第一行第二个元素的地址

    printf("a+1 = %p\n",a+1);                  //a+1,这里代表第二行的首地址
    printf("a[1] = %p\n",a[1]);                //a[1],这里代表第二行的首地址
    printf("&a[1] = %p\n",a[1]);               //&a[1]是一个行地址与a相同,这里代表第二行的首地址
    printf("&a[0]+1 = %p\n",&a[0]+1);          //&a[0]+1,&a[0]因为是个行地址所以加1变成第二行的地址。
    printf("a[0]+1 = %p\n",a[0]+1);            //a[0]+1,这里代表第一行第二个元素的地址
    printf("*a + 1= %p",*a + 1);               //*a+1指向第二个数据的地址 等价于*(a+0)+1 *(a+0) = a[0] 同上
    printf("&a[0][0] + 1 = %p\n",&a[0][0] + 1);//&a[0][0]+1,这里代表第一行第二个元素的地址
    printf("&a + 1 = %p\n",&a + 1);            //&a + 1,超过数组范围
    printf("----------------------------\n");

    //&a[0][0] = a[0]+0 = *(a+0)+0
    //解引用 a[0][0] = *(&a[0][0]) = *(a[0]+0) = *(*(a+0)+0)
    //所以 a[i][j] = *(&a[i][j]) = *(a[i]+j) = *(*(a+i)+j)
}
运行结果如下:
<img src="https://img-blog.csdn.net/20161014211927872?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: Arial, Helvetica, sans-serif;" alt="" />


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值