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 章:
当具有整数类型的表达式与指针相加或相减时,结果具有指针操作数的类型。
在草案中,没有提到“整数”是(签名)int或unsigned。
那么两者都可以用于所有平台上的指针操作数吗?
在此上下文中,“具有整数类型的表达式”是指任何整数类型,例如signedor unsigned char、short、int、long、 or long long,以及由实现定义的任何其他整数类型。
因此,您可以安全地使用类型参数int或unsigned int带有指针的参数,前提是结果指针仍指向相同的对象或数组。
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |