指针在数组中的加减运算

有任何不懂的问题可以评论区留言,能力范围内都会一一回答

本期我们主要通过数组讲解指针+-整数和指针-指针

数组本质上和指针是相似的,数组名是数组首元素的地址,我们也可以通过指针去访问数组,这个后面会放在数组与指针思考抽一期去讲解

1.指针加减整数 

首先我们要明确一点就是数组名是数组首元素地址

其次我们知道数组元素之间的元素是连续的,因此我们得到首元素地址我们就可以通过得到其他元素的地址,然后再进行访问。

我们先创建一个数组,然后尝试用for循环和指针去遍历

int main(void) {
    int arr[6] = { 1,2,3,4,5,6 };
    int* p = &arr[0];
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (int a = 0; a < sz; a++)
    {
        printf("%d\n", *(arr+a));
        
    }
    return 0;
}

很显然我们对指针进行整数加减就是对数组不同元素的访问 

但是同时引出一个问题就是如果是二维数组呢???我们改如很去处理呢?

二维数组用指针访问非常麻烦,可以先看前面的数组与指针思考的类容,后面我也会去填这个坑的

但是要记住指针类型一定要和数组类型一致,数组是int[]类型的,那么指针最好是int*类型的,不然容易出错

2. 指针减指针

指针减指针要确保:相减的两个指针要指向同一个数组或者空间,不然就算编译可以通过,计算的结果也是不可控的。

指针减指针本质上得到的是指针之间元素的个数

 如图所示它既可以是正的也可以是负的。

最后给大家留个思考题

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
    int arr[6] = { 1,2,3,4,5,6 };
    char* p = arr;
    int sz = sizeof(arr) / sizeof(arr[0]);
    for (int a = 0; a < sz; a++)
    {
        printf("%d\n", *p);
        p += 4;
    }
    return 0;
}

这串代码好像没有什么问题,但是有很大的问题,思考一下问题在哪,为什么?

提示: 但是要记住指针类型一定要和数组类型一致,数组是int[]类型的,那么指针最好是int*类型的,不然容易出错

这个我将在每日好题(2)中讲解

最后老规矩,以一张思维导图作为结尾

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值