我正在学习C编程语言,我刚刚开始学习arrays with pointers.我在这个问题上有问题,我希望输出必须是100,但它是101,谁能解释为什么?
int main(){
int arr[] = {1, 2, 3, 4, 5};
char *ptr = (char *) arr;
printf("%d", *(ptr+4));
return 0;
}
我正在学习C编程语言,我刚刚开始学习arrays with pointers.我在这个问题上有问题,我希望输出必须是100,但它是101,谁能解释为什么?
int main(){
int arr[] = {1, 2, 3, 4, 5};
char *ptr = (char *) arr;
printf("%d", *(ptr+4));
return 0;
}
假设一个小端 struct ,其中int是32位(4字节),则int arr[]
的单个字节如下所示(低位地址的最低有效字节.祸不单行中的所有值):
|01 00 00 00|02 00 00 00|03 00 00 00|04 00 00 00|05 00 00 00
char *ptr = (char *) arr;
现在,ptr
点指向第一个字节——由于您已将其转换为char*
,因此它将被视为字符数组:
|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- ptr
然后,*(ptr+4)
访问char数组的第五个元素并返回相应的char
值:
|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
^
+-- *(ptr + 4) = 2
因此,printf()
个 fingerprint 2
个.
在Big Endian系统上,每个int
中的字节顺序颠倒,导致
|0|0|0|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5
^
+-- *(ptr + 4) = 0