首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组中的负索引

数组中的负索引
EN

Stack Overflow用户
提问于 2012-10-06 02:20:41
回答 5查看 6.2K关注 0票数 5

可能重复:

Negative array indexes in C?

我可以在数组中使用负索引吗?

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
    char a[] = "pascual";
    char *p = a;

    p += 3;
    printf("%c\n", p[-1]); /* -1 is valid here? */
    return 0;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-06 02:22:19

是的,-1在这个上下文中是有效的,因为它指向分配给char a[]数组的内存中的有效位置。p[-1]等同于*(p-1)。按照示例中的赋值链,它与有效的a+3-1a+2相同。

EDIT :一般规则是,整数和指针(通过扩展,指针上的等效索引操作)的加/减操作需要生成指向相同数组或数组末尾之外的一个元素的结果,才能有效。谢谢你,Eric Postpischil,你的留言太棒了。

票数 8
EN

Stack Overflow用户

发布于 2012-10-06 02:39:04

C 2011 online draft

6.5.6加法运算符

8 ...if表达式P指向数组对象的第i个元素,表达式(P)+N (等价地,N+(P))和(P)-N (其中N具有值n)分别指向数组对象的第i+n个和i个−n个元素,前提是它们存在...

重点是我的。因此,在您的特定示例中,p[-1]是有效的,因为它指向a的现有元素;但是,a[-1]将是无效的,因为a[-1]指向不存在的a元素。类似地,p[-4]将是无效的,a[10]将是无效的,等等。

票数 3
EN

Stack Overflow用户

发布于 2012-10-06 02:21:40

它当然是有效的。

(C99,6.5.2p1)“其中一个表达式的类型应为‘’指向对象类型的指针‘’,另一个表达式的类型应为整数类型,结果的类型为‘’类型‘’。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12751918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档