数组与指针

参考

指针详解:https://www.runoob.com/w3cnote/c-pointer-detail.html

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一 指针的值----或者叫指针所指向的内存区或地址

  指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?(重点注意)

二.指针与一维数组

1.一维数组名就是就是首地址,也是第一个元素地址。

    int arr[10] = {1, 2, 7, 4, 5};
    int *p1 = &arr[0];      //用首元素地址
    int *p2;
    p2=arr;                 //赋值操作得到数组地址

 2.指针运算,++地址增加指向类型的字节数

    char a[20] = {'a', 'b', 'c', 'd', 'e', 'f'};
    int *ptr = (int *)a; //强制类型转换并不会改变 a 的类型
    printf("自增前*ptr:%c \n", *ptr);
    ptr++; //  指向a[4]
    printf("自增后*ptr:%c\n", *ptr);
    *ptr = 'm'; //修改a[4]
    printf("修改后*ptr:%c\n", *ptr);
    printf("修改后[]4:%c", a[4]);

 

二.指针与二维数组

1.关于地址:

  • 如a[3][4],表示三个一维数组组成(a[0],a[1],a[2])。数组名a指向第一个元素a[0]地址,而a[0]本身是一维数组名,所以a是指向地址的地址,即指向指针的指针。
    int arr[2][3] = {
        {1, 2, 7},
        {4, 5, 6}};
    int *p1 = arr[0];
    int *p2 = *arr;
    int *p3 = &arr[0][0];
    // 第i行地址
    printf("%p\n", p1);
    printf("%p\n", p2);
    printf("%p\n", p3);
    printf("*(arr + 1):%p\n", *(arr + 1));
    printf("arr + 1:   %p\n", arr + 1);
    printf("arr[1]:    %p\n\n", arr[1]);
    //  行地址  相当于数组名
    int(*p)[3] = arr;
    printf("p: %p\n", p);
    printf("*p:%p\n", *p);
    printf("*(*(p + 1) + 1) :%d\n", *(*(p + 1) + 1));
    printf("**p:            %d\n", **p);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值