如果我声明以下变量:
int array[10] = { 34, 43,12, 67, 34, 43,26, 98, 423,1 };
int * p = array;
然后,这个循环:
for ( int i = 0; i < 10; i++ )
{
std::cout << &*p++ << " ";
}
给我不同的输出(一组不同的地址),这个代码:
for ( int i = 0; i < 10; i++ )
{
std::cout << p++ << " ";
}
为什么?它们在语义上不是等价的吗?
编辑:
好吧,我向所有回答这个问题的人道歉,我没有原始代码,这是我在家里做的一个测试,结果我从我的项目中删除了那个代码。 (我的宽带还没有连接,所以我等到上类才发布这个)。无论如何 - 我很确定我忘记了初始化 p
。但问题是“它们在语义上不是等价的吗?”已得到答复。谢谢。
最佳答案
int array[10] = { 34, 43,12, 67, 34, 43,26, 98, 423,1 };
int * p = array;
for ( int i = 0; i < 10; i++ )
{
std::cout << p++ << " ";
}
p = array;
std::cout << '\n';
for ( int i = 0; i < 10; i++ )
{
std::cout << &*p++ << " ";
}
std::cout << '\n';
给我相同的地址。您是否不小心忘记了 p = array;
之间的内容?
关于c++ - 获取指针的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650691/