【Cherno的C++视频】Type punning in C++

#include 

struct Entity
{
	int x, y;

	int* GetPositions(){ return &x; }
};

int main(void)
{
	int a = 50;
	// implicit conversion.
	double value0 = a;
	// explicit conversion, the memory of a to be treated as a double, a bad idea actually!
	double value1 = *(double*)&a;
	double& value2 = *(double*)&a;
	value2 = 0.0;
	std::cout << "value2 = " << value2 << std::endl;

	Entity e = {5, 8};
	int* position0 = (int*)&e;
	int* position1 = e.GetPositions();
	position1[0] = 2;
	std::cout << "position1 = " << position1[0] << ", " << position1[1] << std::endl;

	// crazy code! just to show how c++ can manipulate memory easily and freely.
	int y = *(int*)((char*)&e + 4);
	std::cout << "y = " << y << std::endl;
	
	std::cin.get();
}

你可能感兴趣的:(Cherno的《C++教程》,c++)