我可以像访问数组一样访问指针吗?

Can I access pointers the same way as arrays?

当我有 int *integers; 并且我使用
分配内存时 integers = (int *)malloc(sizeof(int) * 10);,我可以访问,比如用 integers[1] 存储在那里的第二个值,还是我必须用 *(integers + 1) 来访问?

can I access, say the 2nd value stored in there with integers1, or do I have to do that with *(integers + 1)?

是的,你可以。数组名称衰减为指针,因此在这两种情况下,您都可以像有一个指针指向数据的第一个元素一样。

注意 :请​​参阅 this link 了解为什么不应该转换 malloc.

的结果

是的,您可以像访问数组一样通过指针访问值。

在正常情况下(除了 &sizeof 之后的任何使用或字符串文字),数组会转换为指向其第一个元素的指针,因此实际上使用数组转换为使用指针,而不是相反。

下标运算符[]定义的指针算法。表达式 a[i] 被评估为 *(a + i) - 给定地址 a,从该地址偏移 i 元素并取消引用结果 1 .

所以,是的,您可以在指针表达式和数组表达式上使用 [] 运算符。

请记住,使用指针算法时,会考虑 pointed-to 类型的大小 - 如果 a 是指向 int 的指针,则 a + 1 会产生下一个整数对象 的地址(可以是 a 的 2 到 4 到 8 个字节之间的任何位置)。

还请记住,数组不是指针 - 数组表达式将转换 ("decay") 为指针表达式除非它是 sizeof 或一元 & 运算符的操作数,或者是用于在声明中初始化字符数组的字符串文字。


  1. 这也意味着数组索引是可交换的 - a[1] == 1[a]。但是,您很少会在 International Obfuscated C Code Contest 之外看到 i[a]