C语言----<另类>神奇的"Hello World!"

先上代码

#include <iostream>
using namespace std;
void a() {
    printf("Hello World!");
}
void b() {
    int a1[5] = { 0 };
    a1[8] = (int)a;
}
int main() {
    b();
    return 0;
}

代码运行过程:

当程序进去main函数时,return 返回地址已读取出来.代码向下运行,执行进入b函数,

进入b函数,申请一个int类型数组,大小是20个字节.当我们给这个数组赋值的时候,将a函数强制转换成int类型,因为函数也是一个地址,而后根据不同编译器数组的大小有所不同,这里是到8的位置,是返回值的地址,正好将a函数的地址覆盖在上边,

当程序继续向下执行,退出b函数的时候,因为地址改变,代码将执行新的地址,也就是a函数的地址,进入a函数中,打印字符串.

猜你喜欢

转载自www.cnblogs.com/0x0000/p/10321996.html
今日推荐