C语言下的强制类型转换

来源:百度知道 编辑:UC知道 时间:2024/06/22 07:27:08
#include <stdio.h>

char a[] =
{0x55,
0x89, 0xe5,
0x8b, 0x45, 0x08,
0x03, 0x45, 0x0c,
0xc9,
0xc3};

int main ()
{
int v;

v = ((int (*)(int, int))a)(3, 4);
printf ("sum=%d\n", v);
return 0;
}

程序如上所示,这里面a是一个数组(实际是一段代码),下面想调用它,如果直接调用肯定会报错,所以就用了比较特殊的强制类型转换((int (*)(int, int))a)(3, 4)来欺骗编译器,这样做的原理是什么呢?怎么实现数组到函数转换的呢?

内存中的数据和指令没有任何区别,关键在于程序如何去解释内存中的数据,你把它用作指令,它就是指令,你把它用作数据,它就是数据,这就是强制转换的意义,建议LZ看看王爽的《汇编语言》。。

上面的应该属于机器码的十六进制表示方式。。

好像那段指令有问题,我运行报错。。