printf 中的寻址运算符将函数指针的地址从常规地址更改为 0x1000。为什么会发生这种情况,这意味着什么?
#include <stdio.h>
int main()
{
int (*fp) (int);
printf("%p\n", (fp));
printf("%p", (fp));
}
当我运行这个时,我得到
0x560cb44ce060 0x560cb44ce060
正如预期的那样,但是当我运行这个
#include <stdio.h>
int main()
{
int (*fp) (int);
printf("%p\n", (fp));
printf("%p", &(fp));
}
ı 得到
0x1000 0x7ffcc92c8990
当我在最后一行添加 &
运算符时,我真的不知道会发生什么变化。
在使用
printf
的第一种情况下,输出未初始化的指针fp
(它的垃圾值)
int (*fp) (int);
printf("%p\n", (fp));`
在使用 printf 的第二种情况下,输出指针的有效地址
fp
本身
printf("%p", &(fp));
所以没有任何改变。输出了两个不同的实体:存储在变量(指针)中的值和变量本身的地址。
也许你混淆了指针指向的地址和指针的地址。 第一个 %p 将输出 fp 保存的地址(尽管它是垃圾值,因为你没有初始化它),第二个将输出 fp 的地址。