我可以像访问数组一样访问指针吗?
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
或一元 &
运算符的操作数,或者是用于在声明中初始化字符数组的字符串文字。
- 这也意味着数组索引是可交换的 -
a[1] == 1[a]
。但是,您很少会在 International Obfuscated C Code Contest 之外看到 i[a]
。
当我有 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
或一元 &
运算符的操作数,或者是用于在声明中初始化字符数组的字符串文字。
- 这也意味着数组索引是可交换的 -
a[1] == 1[a]
。但是,您很少会在 International Obfuscated C Code Contest 之外看到i[a]
。