C:int或unsignedint我用于指针增加的类型
对于这种情况:
int arr[] = {0, 1, 2};
void func (int* arr_in){
int offset_0 = 0;
int offset_1 = 1;
int offset_2 = 2;
printf("%dn", *(arr_in + offset_0) );
printf("%dn", *(arr_in + offset_1) );
printf("%dn", *(arr_in + offset_2) );
}
编译器不会抱怨我使用的是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("%dn", *(arr_in + offset_0) );
printf("%dn", *(arr_in + offset_1) );
printf("%dn", *(arr_in + offset_2) );
}
我参考了草案 C11 中的第 6.5.6/8 章:
当具有整数类型的表达式与指针相加或相减时,结果具有指针操作数的类型。
在草案中,没有提到“整数”是(签名)int或unsigned。
那么两者都可以用于所有平台上的指针操作数吗?
回答
在此上下文中,“具有整数类型的表达式”是指任何整数类型,例如signedor unsigned char、short、int、long、 or long long,以及由实现定义的任何其他整数类型。
因此,您可以安全地使用类型参数int或unsigned int带有指针的参数,前提是结果指针仍指向相同的对象或数组。