作用域變量重定義
/**
?* @file func_pointer.cpp
?* @brief 函數(shù)指針的使用!
?* @author 光城
?* @version v1
?* @date 2019-07-20
?*/
#include <iostream>
using namespace std;
/**
?* @brief 定義了一個變量pFun,這個變量是個指針,指向返回值為空和參數(shù)為int的函數(shù)的指針!
?*/
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(); ? ? ? ? ? ? /*調(diào)用*/
}
在代碼中,第一次定義的 pFun
是一個全局變量,它是一個函數(shù)指針類型。在全局作用域中定義變量時,這個變量的作用域?qū)⒏采w整個程序,直到程序結(jié)束為止。因此,在后面的 main
函數(shù)中,我們可以直接訪問和修改這個全局變量。
在 main
函數(shù)中,我們重新定義了一個名為 pFun
的變量,這次定義是在局部作用域中。由于變量名相同,因此這次定義會隱藏掉全局作用域中的同名變量。在這個局部作用域中,我們將 pFun
定義為 func
類型的變量,這是一個函數(shù)指針類型,可以指向返回值為空、無參數(shù)的函數(shù)。因為這個定義是在局部作用域中進行的,所以它不會影響全局作用域中的同名變量。
因此,在 main
函數(shù)中,我們可以同時存在兩個名為 pFun
的變量,它們具有不同的類型和作用域。這就是為什么能夠在 main
函數(shù)中重新定義 pFun
。