指针与数组的示例代码(帮助理解)

以下是指针与数组关系的事例代码,帮助理解

#include 
   
   
    
    

#define DEBUG 1
#if DEBUG
int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int b[2][3] = {{1, 2, 3}, {4, 5, 6}};
    /*一维数组*/
    printf("*a is %x\n", *a);           //一维数组的首地址中的值为1,
    printf("a is %x\n", a);             //一维数组的首地址
    printf("&a is %x\n", &a);           //一维数组的首地址,读取方式为一维数组大下
    printf("(&a)+1 is %x\n", (&a) + 1); //一维数组的首地址
    printf("a[0] is %x\n", a[0]);       //一维数组的首元素
    printf("&a[0] is %x\n", &a[0]);     //首元素的地址
    printf("a+0 is %x\n", a + 0);       //a是数组名,是一个一级指针常量
    printf("a+1 is %x\n", a +  1);       //a的读取方式为一个int的大小
    printf("\n");

    /*二维数组*/
    printf("**b is %p\n", **b); //二维数组的首元素的值
    printf("*b is %p\n", *b);   //二维数组第0行(一维数组)一维数组首元素的地址
    printf("b is %p\n", b);     //b是一个二级常量指针
    printf("&b is %p\n", (&b)); //读取方式为一个二维数组大小
    printf("(&b)+1 is %p\n", (&b) + 1);
    printf("(*b)+1 is %p\n", (*b) + 1); //二维数组第0行(一维数组)第二个元素地址
    printf("b is %p\n", b);             //b是一个二级常量指针,读取方式为一行
    printf("b+1 is %p\n", b + 1);       //二维数组第1行(一维数组)元素地址
    printf("\n");
    printf("&b[0] is %p\n", &b[0]); //二维数组第0行(一维数组)一维数组首元素的地址,读取方式为一行元素
    //printf("&(&(b[0])) is %p\n", &(&(b[0])));//error: lvalue required as unary '&' operand
    printf("(&b[0])+1 is %p\n", (&b[0]) + 1); //二维数组第1行(一维数组)一维数组首元素的地址
    printf("b[0] is %p\n", b[0]);             //读取方式为一个int元素
    printf("b[0]+1 is %p\n", b[0] + 1);

    printf("\n");
    printf("*b[0] is %p\n", *b[0]);
    printf("*(b[0]+1) is %p\n", *(b[0] + 1));

    printf("\n");
    printf("b[0][0] is %p\n", b[0][0]);
    printf("&b[0][0] is %p\n", &b[0][0]); //读取方式为一个int大小
    printf("(&b[0][0])+1 is %p\n", (&b[0][0]) + 1);
    return 0;
}
#endif
   
   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值