最近有同学发来这样一段代码,并提出一个问题,数组的下标为什么可以是负数?
#includeint 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
原文标题:数组的下标可不可以是负数
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论