【发布时间】:2011-11-21 16:53:00
【问题描述】:
所以,我正在通过http://cplusplus.com/doc/tutorial/pointers/ 学习指针,但我对指针算术部分一无所知。有人可以澄清一下,或者给我一个关于这个的教程,我可能会更好地理解。
我对所有括号里的东西特别困惑,比如*p++、(*p)++、*(p++) 等之间的区别。
【问题讨论】:
-
您应该在 C++ 中查看 order of operations 和/或 operator precedence。
-
只是为了让我们可以定制我们的答案——您是否也对整数后缀运算符感到困惑?也就是
int i=0; i++; (i)++;看懂了吗?而且,您了解指针运算的其他方面吗?你了解p+1和*(p+1) = 3吗? -
a) 你到底对什么感到困惑?你明白括号里的表达式吗? b) 不要使用指针。在 C++ 中几乎从来没有明确需要它们,如果你刚刚开始,也永远不需要。
-
@KerrekSB:迭代器使用相同的语法。用于迭代的原始指针并没有错,您只是想避免它们的生命周期管理。
-
@KerrekSB:没有 void 指针算术之类的东西,你不能对任何指向不完整类型的指针使用算术运算,
void只是其中一个例子。std:vector<T>::iterator可能是一个原始指针。理解指针算法是以元素而不是字节来衡量的,这是 C++ 的基础。