我不明白将数组类型转换为 char* 是如何工作的。
int array[9] = {42, 5, 23, 82, 127, 21, 324, 3, 8};
*p = *((char*)array);
printf("1: %d\n", *p);
结果是“1: 42”,如果我将其更改为array + 4
,结果是“1: 5”。这是为什么?
最佳答案
您的问题由两部分组成:
Why does that equal to the first integer from the array?
int array[9] = {42, 5, 23, 82, 127, 21, 324, 3, 8};
*p = *((char*)array);
printf("1: %d\n", *p);
你有一个整数数组:
+-----------+-----------+-----------+--- ... ---+-----------+
| 42 | 5 | 23 | | 8 |
+-----------+-----------+-----------+--- ... ---+-----------+
如果你按字节查看它,它看起来像这样(假设小端):
+--+--+--+--+--+--+--+--+-- ... ---+--+--+--+--+
|42| 0| 0| 0| 5| 0| 0| 0| | 8| 0| 0| 0|
+--+--+--+--+--+--+--+--+--- ... ---+--+--+--+--+
^
|
p points here.
在小端布局中,整数的最低 8 位位于整数的第一个字节。
这意味着指向该地址的指针将产生 MSB。如果您的整数值足够小,可以容纳 8 位,则 *p
的值将与 array[0]
第二部分是
if I change it to array + 4, the result is "1: 5". Why is that?
这里缺少的是您将 4 添加到 p
,而不是 array
。或者您可以将 4 添加到 (char*)array
中。如果将 4 添加到数组,则会添加 4*sizeof(array) 字节,但情况并非如此。
有关指针算术的详细信息已在其他答案中解决。
关于c - 为什么它等于数组中的第一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57411375/