使用printf(char*)输出函数名内存地址

int main(){
...
}
输出main在内存中的地址
用printf(char*)
不要用printf("%p",addr)!!!

第1个回答  2015-10-28

printf没有%p格式。

#include <stdio.h>

int main() {
    char s[100];
    sprintf(s, "main函数的地址:%08X\n", main);
    printf(s);
    getchar();
    return 0;
}

追问

好像不对吧。。

追答

看了反汇编,又查了一下资料,终于找到原因了。没想到之前认为理所当然的东西竟然比我想象的复杂。
在debug模式下,程序输出的函数地址其实是vs生成的“增量链接表”的地址,vs这么做的具体原因请看参考资料。
而在release模式下就没有这张表了,程序输出的结果和vs显示的一致。

参考资料:http://www.cnblogs.com/xylc/p/3503612.html

本回答被提问者和网友采纳
第2个回答  2022-03-03
可以用%p,或者%#X
char c = 'A';
printf("%p\n",&c);
printf("%#X",&c);
相似回答