1-0指针数组和数组指针

指针数组是一个数组,数组指针是一个指针。


一、指针数组

指针数组,名词最终落脚点为数组,也就是一个由指针构成的数组。

1.指针数组示例

    int a[2][3] = {{1, 2, 3}, {2, 1, 3}};
    // 由于[]结合优先级大于*所以arr本质为数组
    int *arr[3] = {a[0], a[1]}; // 此处注意由于arr为数组,且数组元素为指针

2.指针数组的索引

    printf("the size of the arr is %d bytes\n", sizeof(arr));
    // output:the size of the arr is 24 bytes
    
    // 由于arr中元素为指针,所以直接对arr进行算术运算地址偏移量为指针所占的8字节
    printf("the address of arr is %p, the address of arr+1 is %p\n", arr, arr + 1);
    // output:the address of arr is 000000dc6b5ff930, the address of arr+1 is 000000dc6b5ff938

    // *arr表示取到了arr中的第一个指针,*(*arr+1)表示取到了arr中第一个指针的第二个元素
    printf("the value of a[0][1] is %d, the value of a[1][1] is %d\n", *(*arr + 1), *(*(arr + 1) + 1));
    // output:the value of a[0][1] is 2, the value of a[1][1] is 1

二、数组指针

数组指针,名词最终落脚点为指针,也就是一个指向数组的指针。也成为行指针。

1.数组指针示例

    // 由于*先和arr1结合,所以arr1本质为指针,指针指向一个包含3个整数的数组
    int (*arr1)[3] = a;

2.数组指针的索引

    printf("the size of the arr1 is %d bytes\n", sizeof(arr1));
    // output:the size of the arr1 is 8 bytes

    // 由于arr1指向一个3个整数的数组,所以直接对arr1进行算术运算地址偏移量为3个整数数组所占的12字节
    printf("the address of arr1 is %p, the address of arr1+1 is %p\n", arr1, arr1 + 1);
    // output:the address of arr1 is 0000005b5ddff810, the address of arr1+1 is 0000005b5ddff81c

    // *arr1表示取到了当前指向的数组,*(*arr1+1)表示取到了arr1当前指向的数组中的第二个元素
    printf("the value of a[0][1] is %d, the value of a[1][1] is %d\n", *(*arr1 + 1), *(*(arr1 + 1) + 1));
    // output:the value of a[0][1] is 2, the value of a[1][1] is 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值