今天浏览了一些源码(是一个说明软件框架使用的示例文件),发现了很多这样的代码:
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 + 0
或 array + 9
也是一样的。我什至总是将此类代码重写为 size_t for 循环,但这是风格问题。
但是过度使用它让我开始思考:我是漏掉了一些显而易见的东西还是隐藏在语言的阴暗角落的一些东西?
对于任何想要查看原始源代码的人来说,它都是令人讨厌的 goto
s 、malloc
s ,当然还有这个指针,请随意访问 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/