0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数组的下标为什么可以是负数

学益得智能硬件 来源:学益得智能硬件 2024-12-20 11:18 次阅读

最近有同学发来这样一段代码,并提出一个问题,数组的下标为什么可以是负数?

#include 


int main()
{
    const char *s = "helloworld";
    const char *p = s + 5;


    printf("%c
", p[-2]);


    return 0;
}

关键是这段代码,编译运行都很顺利。

首先需要搞懂下标的作用是什么,准确的说,它是个偏移量。

比如 a[3],数组名 a 作为数组首元素地址,下标 3 表示从这个地址开始向后移动 3 个元素,至于具体是几个字节,得看什么元素。

所以 a[3] 完全等价于 *(a + 3),甚至把代码写成 3[a] 编译器也没意见,表示的都是一个意思。

如果把数组下标写成负数,就表示向前偏移。

a[-1] 就是向前偏移一个元素,很显然,前面这块内存不属于数组,不能这样使用,所以很少见到数组下标是负数的。

但是对于这样精心设计过的代码,保证内存不会越界的情况下,完全没有问题。

s 指向了字符 h,p 指向了字符 w,p[-2] 就是往前数两个元素,所以打印出来的就是 l。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68516
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25939

原文标题:数组的下标可不可以是负数

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数组名之间可以直接赋值吗

    数组之间的赋值能不能直接使用等于号?比如这样的代码。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的头像 发表于 11-26 11:23 133次阅读

    指针数组和二维数组有没有区别

    指针数组和二维数组有没有区别?比如这样的两个代码。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的头像 发表于 11-24 11:12 138次阅读

    C语言数组应用计算机导论A第6讲:数组

    C语言数组应用计算机导论A第6讲:数组
    发表于 11-20 15:33 0次下载

    TLV320AIC3254的输入断开,采集噪声数据均为负数还能听到噪声,请问负数的底噪是如何产生的?

    TLV320AIC3254的输入断开,采集噪声数据,发现所有的数据均为负数,并且能听到明显的噪声。想请教大家,负数的底噪是如何产生的?谢谢!
    发表于 10-17 07:40

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 2239次阅读

    解析嵌入式编程8种常用的数据结构

    数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至
    发表于 05-03 10:54 461次阅读
    解析嵌入式编程8种常用的数据结构

    用PWM+DMA,然后用DAC输出,可以是触发输出吗?

    如果用PWM+DMA,然后用DAC输出,可以是触发输出吗?输出的是否是占空比可调的方波,可以是三角波吗?求大神解答。
    发表于 04-22 06:59

    深入探索KUKA KRL中的数组应用

    如果 CHAR 类型数组的所有数组元素都拥有相同的字符串,则不必单独初始化每个数组元素。忽略右侧的数组下标。(对于一维
    的头像 发表于 04-18 10:37 1226次阅读
    深入探索KUKA KRL中的<b class='flag-5'>数组</b>应用

    鸿蒙TypeScript学习第17天:【对象】

    对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等
    的头像 发表于 04-15 15:33 660次阅读
    鸿蒙TypeScript学习第17天:【对象】

    无功补偿装置在不投入电容的情况下显示负数

    无功补偿装置是一种重要的电力设备,用于调节电网的功率因数,提高电能利用效率。然而,有时在不投入电容的情况下,无功补偿装置会显示负数,给用户们一种误导。 首先,需要明确的是,无功补偿装置的显示负数并不
    的头像 发表于 03-06 14:11 5175次阅读

    补偿控制器显示负数如何处理

    补偿控制器作为一种重要的工业自动化设备,在各种生产过程中起着至关重要的作用。然而,当遇到负数显示的情况时,可能会给操作人员带来困扰。下面将从多个方面对补偿控制器显示负数问题进行全面解析,探讨应对方法,帮助企业们更好地处理类似情况。
    的头像 发表于 02-29 14:24 1388次阅读

    数组和链表在内存中的区别 数组和链表的优缺点

    内存中的存储方式: 数组是一种连续存储的数据结构,它将元素存储在相邻的内存位置中。这使得数组的访问效率高,可以通过下标来直接访问任何一个元素。 链表是一种离散存储的数据结构,它将元素
    的头像 发表于 02-21 11:30 1020次阅读

    PHP中数组的使用方法!

    如何创建数组、添加/删除元素、访问数组元素、遍历数组以及使用数组方法和函数等等。 首先,我们来看一下如何创建一个数组。 1. 创建
    的头像 发表于 01-12 15:11 538次阅读

    补偿控制器为什么会显示负数

    在自动控制领域,补偿控制器是一种常用的控制器类型,它可以对系统的误差进行补偿,并实现系统的稳定性和精确性。然而,有时候我们会遇到一个问题,那就是补偿控制器为什么会显示负数
    的头像 发表于 01-12 14:21 2131次阅读
    补偿控制器为什么会显示<b class='flag-5'>负数</b>?

    labview怎么查数组中相同元素的个数

    要查找LabVIEW中数组中相同元素的个数,可以使用以下步骤: 创建一个包含要查找的数值的数组。这可以通过手动输入数组元素或从文件/其他数据
    的头像 发表于 12-28 16:42 3468次阅读