C语言-指针数组和数组指针

指针数组和数组指针

指针数组

概念

指针数组:首先它是一个数组,数组里面的元素存放的是指针

定义

例如:

int *p1[5]

由于 [] 的优先级比 * 的优先级高,所以先组成 p1[5],构成一个数组的定义,数组名为 p1,而 int * 修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个 指向 int 类型数据的指针。

测试代码

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("hello tyustli\r\n");
    int *p1[5];/* p1 是一个指针数组,数组的内容是指向 int 的指针 */
    char *p2[5] = {"hello", "world", "tyustli", "aaaaaaaaaa", "bbbbbbbbbb"};

    int value0 = 0x11;
    int value1 = 0x22;
    int value2 = 0x33;
    int value3 = 0x44;
    int value4 = 0x55;

    p1[0] = &value0;
    p1[1] = &value1;
    p1[2] = &value2;
    p1[3] = &value3;
    p1[4] = &value4;

    printf("%s\r\n", p2[3]);  /* p2 是一个数组, p2[0] 是数组的第一个元素,该元素存放的是 char 类型的指针 */

    for(int i = 0; i < 5; i++)
    {
        printf("0x%x ", *p1[i]);
        printf("%p ", p1[i]);
        printf("\r\n");
    }

    return 1;
}

/*
 编译:gcc -o out test.c
 运行:./out
 运行结果:
hello tyustli
aaaaaaaaaa
0x11 0x7ffff1788328
0x22 0x7ffff178832c
0x33 0x7ffff1788330
0x44 0x7ffff1788334
0x55 0x7ffff1788338
*/

数组指针

概念

数组指针:首先它是一个指针,指针指向的是一个数组

定义

int (*p1)[5]

() 的优先级比 [] 优先级高,所以 *p1 是一个指针,指针变量名为 p1int 修饰的是数组的内容,即数组的每个元素,也就是说 p1 是一个指针,它指向一个包含 5 个整型元素的数组

测试代码

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("hello tyustli\r\n");

    int array[5] = {0x11, 0x22, 0x33, 0x44, 0x55};
    int(*p1)[5]; /* p1 是一个数组指针,指向的是一个数组 */

    p1 = &array;

    for (int i = 0; i < 5; i++)
    {
        printf("0x%x ", (*p1)[i]); /* p1 是一个指针 指向的是一个数组, *p1 是一个数组, 所以可以使用下表访问数组的值 */
    }

    printf("\r\n");

    return 1;
}
/*
编译:gcc -o out test.c
运行:./out
运行结果:
hello tyustli
0x11 0x22 0x33 0x44 0x55
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值