我刚刚读了一些代码,发现这个人用arr[-2]来访问arr之前的第二个元素,就像这样:

|a|b|c|d|e|f|g|
       ^------------ arr[0]
         ^---------- arr[1]
   ^---------------- arr[-2]

允许吗?

我知道arr[x]*(arr + x)是一样的.arr[-2]等于*(arr - 2),这似乎没问题.你怎么认为?

推荐答案

没错.根据C99第6.5.2.1/2节:

下标的定义

没有魔法.这是1-1等价.和往常一样,在取消引用指针(*)时,您需要确保它指向有效的地址.

C++相关问答推荐

数组元素的编号索引

从内联程序集调用Rust函数和调用约定

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

通过管道将一个子系统的标准输出发送到另一个子系统的标准输出

如何使用低级C++写出数值

在一个小型玩具项目中实现终端历史记录功能

理解C版宏(看起来像未声明的变量?)

对重叠字符串使用MemMove

从TCP连接启动UDP(C套接字)

将返回的char*设置为S在函数中定义的字符串文字可能会产生什么问题?

不同原型的危险C函数是可能的

是否定义了此函数的行为?

C程序向服务器发送TCPRST

Linux/C:带有子进程的进程在添加waitid后都挂起

如何使crc32的结果与cksum匹配?

共享内存未授予父进程权限

C 语言中 CORDIC 对数的问题

System V 消息队列由于某种原因定期重置

通过修改c中的合并排序对数组的偶数索引进行排序

我们可以在不违反标准的情况下向标准函数声明添加属性吗?