第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數(shù)指針和函數(shù)的地址

函數(shù)指針和函數(shù)的地址

C
慕尼黑的夜晚無繁華 2019-08-26 19:24:35
函數(shù)指針和函數(shù)的地址所以我想在制作函數(shù)指針時,你不需要operator &獲取初始函數(shù)的地址:#include <stdio.h>double foo (double x){     return x*x;}int main () {     double (*fun1)(double) = &foo;     double (*fun2)(double) =  foo;     printf("%f\n",fun1(10));     printf("%f\n",fun2(10));     printf("fun1 = %p \t &foo = %p\n",fun1, &foo);     printf("fun2 = %p \t  foo = %p\n",fun2,  foo);            int a[10];     printf("  a = %p \n &a = %p  \n",a,&a);     return 0;}輸出:>./a.out  100.000000100.000000fun1 = 0x4004f4      &foo = 0x4004f4fun2 = 0x4004f4       foo = 0x4004f4   a = 0x7fff26804470   &a = 0x7fff26804470然后我意識到這對于數(shù)組也是如此,這意味著如果你有int a[10]兩個a并&a指向相同的位置。為什么這是數(shù)組和函數(shù)?地址是否保存在與其中保存的值(地址)具有相同地址的內(nèi)存位置中?
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

鑒于int a[10],雙方a&a產(chǎn)生相同的地址,是的,但它們的類型是不同的。

a是類型的int[10]。當(dāng)它被隱式轉(zhuǎn)換為指針類型時,指針是類型int*并指向數(shù)組的初始元素。&a是類型int (*)[10](即指向十個整數(shù)數(shù)組的指針)。因為數(shù)組中沒有填充,它們都會產(chǎn)生具有相同的指針,但指針具有不同的類型。

函數(shù)類似于數(shù)組,但不完全相同。你的功能foo是類型的double(double)。無論何時foo在表達式中使用并且不是一元運算&符的操作數(shù),它都會隱式轉(zhuǎn)換為指向其自身的指針,該指針屬于類型double(*)(double)。

因此,出于所有實際目的,函數(shù)的名稱和指向同一函數(shù)的指針是可互換的。有一些細微之處,我在回答“為什么所有這些瘋狂的函數(shù)指針定義都能正常工作?真正發(fā)生了什么?”時回答了所有這些細微之處。(這個問題是關(guān)于C ++的問題,但C ++中非成員函數(shù)的規(guī)則與C中的函數(shù)相同。)


查看完整回答
反對 回復(fù) 2019-08-26
?
開滿天機

TA貢獻1786條經(jīng)驗 獲得超13個贊

不,沒有專門用于指向函數(shù)/數(shù)組的額外存儲空間。

大多數(shù)變量variable_name除了獲取該變量的地址之外還有其他含義,因此您需要使用它&variable來獲取地址。

對于函數(shù)或數(shù)組,function_name(本身,后面沒有括號)沒有任何其他含義,因此將它解釋為獲取函數(shù)的地址沒有問題。

同樣反過來:普通指針需要顯式解除引用,但指向函數(shù)的指針不會(再次,因為沒有其他合理的解釋),所以給定一個指向函數(shù)的指針,如:

int (*func)(param_list);

以下是彼此相同的 - 都調(diào)用任何功能func點:

(*func)(params);func(params);


查看完整回答
反對 回復(fù) 2019-08-26
?
繁華開滿天機

TA貢獻1816條經(jīng)驗 獲得超4個贊

基本上,由于函數(shù)名稱是“已知”的函數(shù),因此&并非絕對必要。對于數(shù)組,此行為是相同的?;叵胍幌?,函數(shù)本身不是變量,因此它的行為與您有時可能會有的不同。如果你有第二版K&R,你可以查看5.11節(jié)關(guān)于功能的指示,或者最后的參考手冊,

A7.1節(jié)指針生成:如果某個類型T的表達式或子表達式的類型是“T的數(shù)組”,那么表達式的值是指向數(shù)組中第一個對象的指針,表達式的類型是改為“指向T” 這種轉(zhuǎn)換不會取代表達式是一元&運算符的操作數(shù),...類似地,類型為“函數(shù)返回T”的表達式除非用作&運算符的操作數(shù),否則將轉(zhuǎn)換為“指針函數(shù)返回T.“

A7.4.2節(jié)地址運算符:一元&運算符獲取其操作數(shù)的地址....結(jié)果是指向左值引用的對象或函數(shù)的指針。如果操作數(shù)的類型是T,則結(jié)果的類型是“指向T的指針”。

據(jù)我所知,C99也是如此。


查看完整回答
反對 回復(fù) 2019-08-26
  • 3 回答
  • 0 關(guān)注
  • 541 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號