对于这种情况:
int arr[] = {0, 1, 2};
void func (int* arr_in){
int offset_0 = 0;
int offset_1 = 1;
int offset_2 = 2;
printf("%d\n", *(arr_in + offset_0) );
printf("%d\n", *(arr_in + offset_1) );
printf("%d\n", *(arr_in + offset_2) );
}
int无论我使用的是还是,编译器都不会抱怨unsigned。
其中两个结果似乎也是正确的。
$ clang test.c -Wall -o test
我参考了 C11 草案中的第 6.5.6/8 章:
当一个整数类型的表达式被添加到指针或从指针中减去时,结果具有指针操作数的类型。
在草案中,没有提到(签名)int或unsigned.
那么两者都可以用于所有平台上的指针操作数吗?