为什么我没有收到任何错误(C 风格转换)
Why I don't get any error (C-style casting)
char c{ 10 };
int* i = (int*)&c;
*i = 1; // Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
但在这种情况下我没有收到任何错误
char* c = new char{ 10 };
int* i = (int*)&c;
*i = 1;
//delete c;
为什么会这样?
有
int* i = (int*)&c;
你让 i
指向变量 c
本身,而不是 c
实际指向的地方。
因此*i = 1
将改变指针变量c
的值而不是*c
的值。
如果您想获得相同(或相似)的行为,您应该使 i
指向 c
指向的位置:
int* i = (int*) c;
至于为什么它没有给你任何错误,这是因为在现代系统上 int
是 32 位宽,而指针(如 c
)将是 至少 32 位宽(以及 64 位系统上的 64 位)。
关于在 C++ 中进行 C 风格转换的最后一点注意事项:您应该始终将其视为您做错事情的标志。
char c{ 10 };
int* i = (int*)&c;
*i = 1; // Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
但在这种情况下我没有收到任何错误
char* c = new char{ 10 };
int* i = (int*)&c;
*i = 1;
//delete c;
为什么会这样?
有
int* i = (int*)&c;
你让 i
指向变量 c
本身,而不是 c
实际指向的地方。
因此*i = 1
将改变指针变量c
的值而不是*c
的值。
如果您想获得相同(或相似)的行为,您应该使 i
指向 c
指向的位置:
int* i = (int*) c;
至于为什么它没有给你任何错误,这是因为在现代系统上 int
是 32 位宽,而指针(如 c
)将是 至少 32 位宽(以及 64 位系统上的 64 位)。
关于在 C++ 中进行 C 风格转换的最后一点注意事项:您应该始终将其视为您做错事情的标志。