c++ - 伪装的指针算术 &(array[0])

标签 c++ c pointers pointer-arithmetic

今天浏览了一些源码(是一个说明软件框架使用的示例文件),发现了很多这样的代码:

int* array = new int[10]; // or malloc, who cares. Please, no language wars. This is applicable to both languages
for ( int* ptr = &(array[0]); ptr <= &(array[9]); ptr++ )
{
   ...
}

所以基本上,他们已经完成了“获取位于地址 array + x 的对象的地址”。

通常我会说,这简直是愚蠢,因为直接编写 array + 0array + 9 也是一样的。我什至总是将此类代码重写为 size_t for 循环,但这是风格问题。

但是过度使用它让我开始思考:我是漏掉了一些显而易见的东西还是隐藏在语言的阴暗角落的一些东西?

对于任何想要查看原始源代码的人来说,它都是令人讨厌的 gotos 、mallocs ,当然还有这个指针,请随意访问 look at it online .

最佳答案

是的,第一个没有充分的理由。这是完全一样的事情:

int *ptr = array;

我也同意第二点,不妨写一下:

ptr < (array + 10)

当然你也可以让它成为一个从 0-9 开始的 for 循环,并将临时指针设置为指向数组的开头。

for(int i = 0, *ptr = array; i < 10; ++i, ++ptr)
    /* ... */

当然假设 ptr 没有在循环体内被修改。

关于c++ - 伪装的指针算术 &(array[0]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206246/

相关文章:

C 中的 Char * 指针与整数

c++ - C++ 编译器或预处理器能否将符号转换为大写?

c++ - 无法实例化抽象类,但我有

c++ - 如何从qt中的单选按钮获取值?

c++ - 如何对 16 位数字执行按位运算 (Arduino)

c - printLongestLine 打印无关信息

c - C中访问指针数组值的两种方法

c - 头文件与源文件中的内联函数定义

c - 为什么现代编译器不捕获对数组进行越界访问的尝试?

c - c中的不可变字符串的内存分配在哪里?