c - 为什么它等于数组中的第一个整数?

标签 c arrays

我不明白将数组类型转换为 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/

相关文章:

python - 将结构指针传递给 ctypes 中的函数

c - 在 ARM 上发送返回 29200

C++ 数组函数没有返回正确的结果

php - 以逗号分割 mySQL 结果

python - C 中是否有与 Python 中的 raw_input 功能相同的函数?

php - 在 PHP 7.4 异常的源代码中有 __wakeup 有什么意义?

php - 将数组放入 PHP 中的 WHERE 子句而不命中 X 次 Postgres

python - 比较 NumPy 数组的两个(嵌套)列表/元组

c++ - 在给定矩阵中找到最大的盆地大小

c - sizeof(数组)/sizeof(int)