【发布时间】:2021-02-01 19:23:04
【问题描述】:
对于这种情况:
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章节:
当一个整数类型的表达式被添加到指针或从指针中减去时, result 具有指针操作数的类型。
在草稿中,没有提到“integer”,即(签名)int 或unsigned。
那么两者都可以在所有平台上用于指针操作数?
【问题讨论】:
标签: c pointers integer pointer-arithmetic