这里我的代码......正在给出分段错误错误...请告诉我原因...在这个小程序中我采用了一个函数add()和一个变量int add。在main函数内部我创建了一个add()函数指针,并尝试打印add变量的值。但它给出了错误......请告诉我为什么?
#include<stdio.h>
float add(int , float);
int main()
{
float (*fp)(int , float);
float result;
int add=10;
fp = add;
result = fp(5 , 9.9);
printf("%f\n",result);
printf("%d\n",add);
return 0;
}
float add(int a ,float b)
{
return a + b;
}
答案 0 :(得分:4)
答案 1 :(得分:3)
全球名称shadowed为本地名称。
因此,当您在add
中提及main
时,它将始终尝试首先在add
中声明main
。
当您提供fp = add
时,您正在为函数指针分配一个整数(int add = 10
)。并试图拨打该地址。这是一个无效的地址(10
),因此您遇到了分段错误。
答案 2 :(得分:2)
您编写的代码没有您期望的效果。声明int变量add
时,它会影响函数。之后,此代码fp=add
实际上将函数指针指定给整数变量add的值。然后,当您调用fp
指向的函数时,您将访问一些奇怪的地址(nameley 10
)并获得分段错误。
答案 3 :(得分:0)
函数add()
一个全局变量,int add
是局部变量,当您尝试将add添加到指针时,局部变量的范围优先于全局变量。
尝试阅读它会说类型不匹配的警告。
如果您使用的是gcc类型gcc -Wall programname.c