C++ 对象指针按相反顺序打印结果
我试图使用指针来迭代对象数组。一次打印一个值似乎很好,但当我尝试将它们全部打印在一起时,结果是相反的C++ 对象指针按相反顺序打印结果,c++,pointers,C++,Pointers,我试图使用指针来迭代对象数组。一次打印一个值似乎很好,但当我尝试将它们全部打印在一起时,结果是相反的 #include<iostream> using namespace std; class car{ int tires; public: car(int a) {tires = a;}; int GetTires(){return tires;}; }; int main() { car array[4] = { 2, 4, 6, 8 };
#include<iostream>
using namespace std;
class car{
int tires;
public:
car(int a) {tires = a;};
int GetTires(){return tires;};
};
int main() {
car array[4] = { 2, 4, 6, 8 };
car *p;
p = array;
cout << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << endl;
//Prints: 8 6 4 2
p = array;
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " " << endl;
//Prints: 2 4 6 8
return 0;
}
#包括
使用名称空间std;
班车{
int轮胎;
公众:
汽车(INTA){轮胎=a;};
int GetTires(){返回轮胎;};
};
int main(){
car数组[4]={2,4,6,8};
car*p;
p=阵列;
cout GetTires())如果您使用的是比C++17更旧的编译器,那么中(p++)->GetTires()
求值的顺序在std::cout::operator代码中
cout getires())还显示了一条警告:“警告:对'p'的操作可能未定义[-Wsequence point]”在对象数组中进行迭代——这不是真正的迭代。为什么不编写一个简单的循环,在其中递增指针,而不是假装迭代呢?好吧,我最初确实使用了for循环,它起了作用,但在发生这种情况时,我对指针进行了一些实验。
cout << i << i++; // undefined behavior (until C++17)
a[i] = i++; // undefined behavior (until C++17)
cout << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << endl;
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " " << endl;
ostream& operator<<(ostream& os, const Type& dt)
{
os << dt.value;
return os;
}