当我有int *integers;
时,我使用
分配内存
integers = (int *)malloc(sizeof(int) * 10);
,我可以使用integers[1]
访问存储在其中的第二个值,还是必须使用*(integers + 1)
进行访问?
答案 0 :(得分:3)
是的,您可以通过指针访问值,就像它们是数组一样。
在正常情况下(除了&
,sizeof
或字符串文字之外的任何用法),数组会转换为指向其第一个元素的指针,因此,实际上,使用数组转换使用指针,而不是相反。
答案 1 :(得分:3)
下标运算符[]
在指针运算方面是定义的。表达式a[i]
被评估为*(a + i)
- 给定地址a
,偏离该地址的i
元素并取消引用结果 1 。
所以,是的,你可以在指针表达式和数组表达式上使用[]
运算符。
请记住,使用指针算法时,会考虑指向类型的大小 - 如果a
是指向int
的指针,那么a + 1
会产生地址下一个整数对象(可以是a
中2到4到8个字节的任何位置)。
还记得数组不是指针 - 数组表达式将被转换(“衰变”)到指针表达式,除非它是{{1的操作数或一元sizeof
运算符,或者是用于初始化声明中的字符数组的字符串文字。
<小时/>
&
。但是,您很少会在International Obfuscated C Code Contest之外看到a[1] == 1[a]
。
答案 2 :(得分:0)