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

标签 c arrays pointers dynamic-memory-allocation

当我有 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 或一元 & 运算符,或者是用于在声明中初始化字符数组的字符串文字。


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

关于我可以像访问数组一样访问指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937507/

相关文章:

c - 如何解决这个逻辑表达式?

arrays - 隐含 do 在数组构造函数中构造重复标量值

arrays - 访问另一个场景中的变量

c - 使用指向 char 的指针时出现段错误

c++ - 带数据交换的 std::vector 指针

c - 在链表中添加节点的不同方式

在单核处理器上创建线程

c - 如何在Linux C编程中读取文件中的某些特定行并在控制台中打印它们

c++ - 为什么我可以更改数组

C++测试矩阵是否已经初始化