作用域变量重定义
/**
* @file func_pointer.cpp
* @brief 函数指针的使用!
* @author 光城
* @version v1
* @date 2019-07-20
*/
#include <iostream>
using namespace std;
/**
* @brief 定义了一个变量pFun,这个变量是个指针,指向返回值为空和参数为int的函数的指针!
*/
void (*pFun)(int);
/**
* @brief 代表一种新类型,不是变量!所以与上述的pFun不一样!
*/
typedef void (*func)(void);
void myfunc(void)
{
cout << "asda" << endl;
}
void glFun(int a) { cout << a << endl; }
int main()
{
pFun = glFun;
pFun(2);
func pFun = myfunc; /*赋值*/
pFun(); /*调用*/
}
在代码中,第一次定义的 pFun
是一个全局变量,它是一个函数指针类型。在全局作用域中定义变量时,这个变量的作用域将覆盖整个程序,直到程序结束为止。因此,在后面的 main
函数中,我们可以直接访问和修改这个全局变量。
在 main
函数中,我们重新定义了一个名为 pFun
的变量,这次定义是在局部作用域中。由于变量名相同,因此这次定义会隐藏掉全局作用域中的同名变量。在这个局部作用域中,我们将 pFun
定义为 func
类型的变量,这是一个函数指针类型,可以指向返回值为空、无参数的函数。因为这个定义是在局部作用域中进行的,所以它不会影响全局作用域中的同名变量。
因此,在 main
函数中,我们可以同时存在两个名为 pFun
的变量,它们具有不同的类型和作用域。这就是为什么能够在 main
函数中重新定义 pFun
。