当我有 int *integers;
并且我使用
分配内存时
integers = (int *)malloc(sizeof(int) * 10);
,我可以访问,比如说用 integers[1]
存储在那里的第二个值,或者做我必须使用 *(integers + 1)
?
最佳答案
下标运算符 []
是根据指针算法定义的。表达式 a[i]
被计算为 *(a + i)
- 给定地址 a
,偏移量 i
来自该地址的元素并取消引用结果1。
所以,是的,您可以在指针表达式和数组表达式上使用 []
运算符。
请记住,使用指针算法时,会考虑所指向类型的大小 - 如果 a
是指向 int
的指针,则 a + 1
生成下一个整数对象 的地址(可以是 a
中 2 到 4 到 8 个字节的任意位置)。
还要记住数组不是指针 - 数组表达式将被转换(“衰减”)为指针表达式,除非它是 的操作数sizeof
或一元 &
运算符,或者是用于在声明中初始化字符数组的字符串文字。
- 这也意味着数组索引是可交换的 -
a[1] == 1[a]
。但是,您很少会在 International Obfuscated C Code Contest 之外看到i[a]
.
关于我可以像访问数组一样访问指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937507/