void*?f(int);?//一個指針函數(shù)f
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)融安免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
void*(*p)(int)?=?f;?//一個指向f的函數(shù)指針p
在最上面加一句這樣的定義
typedef void*(*pFn)();
pFn可以這樣理解:首先pFn是一個指針,指針指向一個函數(shù)(或者說pFn是一個函數(shù)指針),此函數(shù)返回一個無類型的指針。最終定義的變量及函數(shù)都是指針罷了,不過是指針的類型不同。所以在編譯時會有警告,說指針類型不匹配。但對于程序來講,都是可以在特定的上下文中使用的。
運行結(jié)果是
t1,t2交替出現(xiàn)。
其實void也可以換為其它的類型如int, double等
又想到一個很好的辦法:
這次編譯不會有警告,運行也不會出錯。
示例代碼如下所示
#include stdio.h
long t1();
long t2();
int main()
{
long(*fn)()= (long (*)()) t1 ;
while(1){
fn = (long (*)()) fn();
}
}
long t1()
{
printf("t1\n");
return (long)t2 ;
}
long t2()
{
printf("t2\n");
return (long)t1 ;
}
指針是常見間接訪問方式.指針就像一個快捷方式,它指向內(nèi)存的一個地址,可以通過指針就可以間接的訪問到數(shù)據(jù)。對于計算機,訪問內(nèi)存的方式有兩種,直接訪問和間接訪問。直接訪問通過就是通過變量名稱去訪問。指針概念是構(gòu)成C/C++的重要元素之一,是變量的一種類型,存放的是指定類型數(shù)據(jù)的地址,而同類型變量存放的是數(shù)據(jù)。
指針變量:就是一個變量,其值是可變的,與整形變量、浮點變量等等的命名規(guī)則完全相同。 “指針”是概念,“指針變量”是具體實現(xiàn)。指針類型說明,即定義變量為一個指針變量; 指針變量名; 變量值(指針)所指向的變量的數(shù)據(jù)類型。
擴展資料:
與其他高級編程語言相比,C 語言可以更高效地對計算機硬件進行操作,而計算機硬件的操作指令,在很大程度上依賴于地址。指針提供了對地址操作的一種方法,因此,使用指針可使得 C 語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是 C 語言的精髓。
我們知道變量在計算機內(nèi)是占有一塊存貯區(qū)域的,變量的值就存放在這塊區(qū)域之中,
在計算機內(nèi)部,
通過訪問或修改這塊區(qū)域的內(nèi)容來訪問或修改相應(yīng)的變量。turbo
c語言中,
對于變量的訪問形式之一,就是先求出變量的地址,然后再通過地址對它進行訪問,這就是這里所要論述的指針及其指針變量。
所謂變量的指針,
實際上指變量的地址。變量的地址雖然在形式上好象類似于整數(shù),
但在概念上不同于以前介紹過的整數(shù),
它屬于一種新的數(shù)據(jù)類型,
即指針類型。turbo
c中,
一般用指針來指明這樣一個表達式x的類型,而用地址作為它的值,也就是說,
若x為一整型變量,
則表達式x的類型是指向整數(shù)的指針,而它的值是變量x的地址。同樣,
若double
d;則d的類型是指向以精度數(shù)d的指針,而d的值是雙精度變量d的地址。所以,
指針和地址是用來敘述一個對象的兩個方面。雖然x、d的值分別是整型變量x和雙精度變量d的地址,
但x、d的類型是不同的,
一個是指向整型變量x的指針,
而另一個則是指向雙精度變量d的指針。在習(xí)慣上,很多情況下指針和地址這兩個術(shù)語混用了。
我們可以用下述方法來定義一個指針類型的變量。
int
*ip;
首先說明了它是一指針類型的變量,注意在定義中不要漏寫符號*,否則它為一般的整型變量了。另外,在定義中的int
表示該指針變量為指向整型數(shù)的指針類型的變量,
有時也可稱ip為指向整數(shù)的指針。ip是一個變量,
它專門存放整型變量的地址。
指針變量的一般定義為:
類型標(biāo)識符
*標(biāo)識符;
其中標(biāo)識符是指針變量的名字,
標(biāo)識符前加了*號,表示該變量是指針變量,
而最前面的類型標(biāo)識符表示該指針變量所指向的變量的類型。一個指針變量只能指向同一種類型的變量,
也就是講,
我們不能定義一個指針變量,
既能指向一整型變量又能指向雙精度變量。
指針變量在定義中允許帶初始化項。如:
int
i,
*ip=i;
注意,
這里是用i對ip初始化,
而不是對*ip初始化。和一般變量一樣,對于外部或靜態(tài)指針變量在定義中若不帶初始化項,
指針變量被初始化為null,
它的值為0。turbo
c中規(guī)定,
當(dāng)指針值為零時,
指針不指向任何有效數(shù)據(jù),
有時也稱指針為空指針。因此,
當(dāng)調(diào)用一個要返回指針的函數(shù)時(以后會講到),
常使用返回值為null來指示函數(shù)調(diào)用中某些錯誤情況的發(fā)生。
指針就是地址。
你說的是指針變量。
整形變量,浮點變量,字符變量,指針變量。通過起名的規(guī)律就知道指針變量是儲存地址的。
指針變量和其他變量的用法一樣,作用域一樣。在一個子涵數(shù)中定義指針變量,是局部變量,其他函數(shù)是不能用的。
不要把指針變量想的太復(fù)雜,地址(指針)也是數(shù)據(jù),和其他字符數(shù)據(jù),整形數(shù)據(jù)一樣,沒什么差異。
當(dāng)然,全局變量的指針變量當(dāng)然可以多函數(shù)使用。
指針的定義:地址。
指針變量的定義:存儲指針的變量。