C: int 或 unsigned int 我用于指针增加的类型

cur*_*wei 3 c pointers integer pointer-arithmetic

对于这种情况:

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) );
}
Run Code Online (Sandbox Code Playgroud)

编译器不会抱怨我使用的是int还是unsigned.

两个结果似乎也正确。

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) );
}
Run Code Online (Sandbox Code Playgroud)

我参考了草案 C11 中的第 6.5.6/8 章:

当具有整数类型的表达式与指针相加或相减时,结果具有指针操作数的类型。

在草案中,没有提到“整数”是(签名)intunsigned

那么两者都可以用于所有平台上的指针操作数吗?

dbu*_*ush 5

在此上下文中,“具有整数类型的表达式”是指任何整数类型,例如signedor unsigned charshortintlong、 or long long,以及由实现定义的任何其他整数类型。

因此,您可以安全地使用类型参数intunsigned int带有指针的参数,前提是结果指针仍指向相同的对象或数组。