fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct ivec3
  5. {
  6. int x, y, z;
  7. ivec3(int x, int y, int z) : x(x), y(y), z(z) { }
  8. };
  9.  
  10. ostream& operator <<(ostream& stream, const ivec3& v)
  11. {
  12. return stream << "(" << v.x << ", " << v.y << ", " << v.z << ")";
  13. }
  14.  
  15. int main() {
  16. ivec3 v(11, 22, 33);
  17. cout << "Изначальный вектор: " << v << endl;
  18. cout << endl;
  19.  
  20. cout << "Размер int в байтах: " << sizeof(int) << endl;
  21. cout << "Адрес v: " << reinterpret_cast<uintptr_t>(&v) << endl;
  22. cout << "Адрес v.y: " << reinterpret_cast<uintptr_t>(&v.y) << endl;
  23. cout << "Адрес v.z: " << reinterpret_cast<uintptr_t>(&v.z) << endl;
  24. cout << endl;
  25.  
  26. cout << "Изменение v.y на 55 по вычисленному адресу..." << endl;
  27. *reinterpret_cast<int*>(reinterpret_cast<uintptr_t>(&v) + sizeof(int)) = 55;
  28. cout << "Новый вектор: " << v << endl;
  29. return 0;
  30. }
Success #stdin #stdout 0s 4656KB
stdin
Standard input is empty
stdout
Изначальный вектор: (11, 22, 33)

Размер int в байтах: 4
Адрес v: 140726497549116
Адрес v.y: 140726497549120
Адрес v.z: 140726497549124

Изменение v.y на 55 по вычисленному адресу...
Новый вектор: (11, 55, 33)