gpt4 book ai didi

c - C 中的类型转换和类型安全

转载 作者:行者123 更新时间:2023-12-02 05:51:34 26 4
gpt4 key购买 nike

在 Mitchell 的书(Concepts in Programming Languages)的第 6.2.1 章中提到:

Type Casts. Type casts allow a value of one type to be used as another type. In C in particular, an integer can be cast to a function, allowing a jump to a location that does not contain the correct form of instructions to be a C function.

所以我打算使用这个不安全的东西做一些不寻常的事情我试过这样的事情(伪代码):

int x = 0;
print "loop";
x();

创建一个无限循环。我尝试通过更改和测试,但我无法应对。我怎样才能像这些东西一样做某事或其他事情?

提前致谢

最佳答案

这不是它的工作方式。

在 C 中,您可以将整数值转换为函数指针值,然后调用这样的函数指针

void (*ptr)() = (void (*)())42;
ptr();

但这可能只会导致崩溃,除非您确切地知道自己在做什么,即您已经以某种方式知道在地址 42 处启动具有该签名的函数;在系统编程中可能会出现像本例中这样的固定地址,而在应用程序编程中则极为罕见。

实际上经常发生的事情(尤其是在 Windows 编程中)是传递转换为某些整数的函数指针(LPARAM 中的回调/WPARAM 有人吗?),然后将它们转换回函数指针以实际使用它们。

此外,执行此类转换/调用时发生的情况超出了 C 标准的范围,这使得实现可以在这方面自由地做他们想做的事。

关于c - C 中的类型转换和类型安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com