0

我很困惑!以下所有 printf 都是打印函数地址的正确方法吗?让我告诉你我的困惑。每次我运行所有这些 printf(即第一个 printf、第二个 printf 和第三个 printf)时,在输出中我得到 02D4 02D4 02D4 但是如果我删除或评论第一个和第二个 printf,当我删除第三个时,我得到以下输出 02BA printf 语句,我得到以下输出 02D0 再次取消注释所有这三个时,我得到: 02D4 02D4 02D4 为什么一个语句会影响其他 printf 行的输出?这真的不是函数的地址吗?我听说 s 和 &s 给出与地址相同的值(就像数组一样)。但是在这里我很困惑为什么当我尝试打印 b 时 s 和 &s 会受到影响,其中 b=s 或 &s。

#include<stdio.h>
#include<conio.h>
int s(int);
void main()
{
int a=10,*b;
clrscr();
b=s(a++);
b=&s;
printf("%p\n",s);       // 1st printf
printf("%p\n",&s);      //2nd printf
printf("%p\n",b);       //3rd printf
getch();
}
int s(int x)
{
return x;
}
4

1 回答 1

2

变量或函数的地址不是您可以依赖的,因为编译器和操作系统都会影响它的结束位置。

但是假设操作系统总是在同一个地址加载你的可执行代码,如果你改变main()函数中的代码长度,很可能会影响s()函数的起始地址。因此,您会得到不同的结果。

于 2014-06-15T13:50:47.323 回答