我们不能使用相同的变量名作为函数吗?

时间:2014-02-06 08:49:37

标签: c variables pointers

这里我的代码......正在给出分段错误错误...请告诉我原因...在这个小程序中我采用了一个函数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;
}

4 个答案:

答案 0 :(得分:4)

没有

函数名称基本上可以看作函数的全局常量指针。

int add = 10;

shadows add()函数的定义,导致函数指针被设置为10被解释为函数指针,这是坏事。

答案 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