C语言很简单一个小问题

2025-01-24 10:42:51
推荐回答(4个)
回答1:

这应该是VC在debug版本中设计,程序改动如下:

#include "stdio.h"
int max(int ,int );
void main()
{
int (*p)(int,int);
int a=5;
int b=3;
p=max;
printf("the max is %d\n",p(a,b));

printf("\np = %d",p);
printf("\n*p = %d",*p);
printf("\nmax = %d",max);
}
int max(int x,int y)
{
return x>y?x:y;
}

 

则输出效果为:

回答2:

p不是函数,p是一个指向含有两个int类型的参数,同时返回值类型也为int的函数,
他是一个函数的指针,所以他是指针,是指针,那么他的值就是p这个变量在内存中的地址。
而由于p=max,所以p这个地址存的就是max这个函数在内存中的地址,
p的地址,和他这个地址中存的值,当然是不一样的.
注意p=max不是让地址相等,意思是让p这个函数指针变量,指向max这个函数,这里的确容易混淆!!

P max
位置 0x00401005 0x004010a0
内容 0x004010a0 未知

回答3:

楼上答的很好了,p是一个指针,其地址由操作系统分配,而P是指向MAX的一个指针,其值为max的地址。

刚才没看追问,我在Linux上也试了一下,其三个地址也是一样的,再查查看看,我使用%p打印的地址。

回答4:

&p = 0xbfb8d784 p = 0x80483c4 ,*p = 0x80483c4
&max = 0x80483c4 max = 0x80483c4 ,*max = 0x80483c4

"关键调试的时候发现,max 地址和p指针指向的地址有区别,不等"

我们测试都是一样的,你的不等,建议打印看看,先不用变量查看。