我试图解决这个问题,有一个向量,有一个指向负索引的指针.我想知道C是否忽略它并将其视为正数,或者它在向量中向后移动,比如-1是数组的最后一个元素.
我试图解决这个问题,有一个向量,有一个指向负索引的指针.我想知道C是否忽略它并将其视为正数,或者它在向量中向后移动,比如-1是数组的最后一个元素.
是的,可以有负索引.这源于C中指针算术的定义,即p[i]
完全等于*(p + i)
,i
为负数完全合法.
所以,不,这个标志并没有被忽视.此外,如果你直接处理一个数组,没有规则说负索引是相对于数组的末尾计算的.如果您直接处理一个数组,负索引最终会试图访问数组开头"左侧"的内存,这完全违反规则,导致undefined behavior.
您可能希望try 以下示例性程序:
#include <stdio.h>
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p = &arr[4];
int *endp = &arr[8];
printf("%d %d %d\n", arr[0], arr[4], arr[8]); /* prints "1 5 9" */
printf("%d %d %d\n", p[-1], p[0], p[1]); /* prints "4 5 6" */
printf("%d %d %d\n", endp[-2], endp[-1], endp[0]); /* prints "7 8 9" */
printf("x %d %d x\n", arr[-1], endp[1]); /* WRONG, undefined */
}
正如注释所示,最后一行是错误的.它try 访问数组arr
外部的内存.它将打印"随机"垃圾值,否则理论上可能会崩溃.