c 中呼叫函式地址時用函式名函式名函式名時輸出的地址一樣,他們之間什麼區別

2021-03-27 13:24:38 字數 4245 閱讀 3788

1樓:匿名使用者

函式名就是指函式的入口地址,&函式名,*&函式名還是函式名,都一個意思。

[ c語言函式名作為入口地址但是呼叫函式時只需要函式名+形參但定義指向函式的指標時需*(指標變數)

2樓:匿名使用者

c語言中,所有的變數都儲存在記憶體中,可以通過&運算子獲得變數的記憶體地址,函式呼叫回時,只需要把普

答通變數前加上&符號,就可以達到傳遞變數地址的目的。例如:定義一個結構體型別structyearmonthday;定義相關函式

c++,關於函式名前面的星號

3樓:sweet丶奈何

前面的星號是和 int結合的。

int *

表示函式

返回的型別是 int *型別的,也就是函式的版返回值是 一個權int型別的指標。

儲存的是函式的地址,這個地址就是函式能被呼叫的關鍵所在,每次函式呼叫,都會先找到該函式的地址,然後程式的流程才能進入到該函式體內。

又由於歷史原因,函式名和對函式名取地址都可以表示函式的地址(即functiontwo和&functiontwo是等價的),所以*functiontwo也就可以看成是*(&functiontwo),也就是functiontwo。

4樓:匿名使用者

儲存的是函式bai的地址du,這個地址就是函式能zhi被呼叫的關鍵dao所在,每次函式呼叫專,都會先找屬到該函式的地址,然後程式的流程才能進入到該函式體內。

又由於歷史原因,函式名和對函式名取地址都可以表示函式的地址(即functiontwo和&functiontwo是等價的),所以*functiontwo也就可以看成是*(&functiontwo),也就是functiontwo。

你可以試試這樣

cout<<&functiontwo<

cout<

cout<<*functiontwo<

得到的結果肯定是一樣的。

5樓:匿名使用者

返回一個函式指標,比如你在main函式中有int *p;int x=5;

p=functiontwo(&x);//返回值就存在了p中了

6樓:匿名使用者

指函式functiontwo返回一個整型指標。

7樓:匿名使用者

表示返回int*的函式

c++函式名前面加&是什麼意思

8樓:司馬刀劍

這個和函式引數加地址符的作用是一樣的,用於返值返回的是引用而不是賦值。

也就是說,該函式返值會通過地址傳送的方式給到函式呼叫者要求的返回值,這樣可以節省物件賦值造成的記憶體浪費,通常用於返值是大型物件(而不是簡單變數型別)的時候。

比如你有個class t,而這個函式的返值是return t; 加上地址符返值後,返回t變數的地址,將地址傳遞給接收返值的變數,而不是新建一個類t,呼叫類的複製函式建立一個新類。

c++如何通過函式地址呼叫函式

9樓:天蠍神經俠侶

簡單說:在put函式的定義處,首先得有一個student的物件,然後通過物件呼叫input,呼叫時實參的個數,型別和input函式中的形參個數,型別都要一致。

具體解釋:

c++的成員函式根據其呼叫的不同,大致可以分為4類:內聯成員函式,靜態成員函式,虛成員函式和上述3種以外的普通成員函式。從本質來說類成員函式和全域性函式在呼叫上並沒有差別,非行內函數的在呼叫時,基本上都包括如下的過程:

函式的引數入棧,eip指標值入棧,然後跳到函式體的地址,執行函式體對應的**,執行完畢調整棧幀。下面就按照上述4個分類進行分析,先來說一下普通的成員函式:

普通的成員函式在被呼叫時有兩大特徵:

1 普通的成員函式是靜態繫結的,

2 普通的成員函式呼叫時編譯器隱式傳入this指標的值。

通過**分析一下:

#include

using namespace std;

class test

;void test::print(int i)上面print函式符合上面所說4類的中的普通成員,所謂的靜態繫結實質是c++源**編譯時,編編譯器在p->print();處翻譯成直接呼叫test類中print()的彙編**,也就是編譯期編譯器就確定了被調函式的相對地址。而所謂的動態繫結實質是,原始碼在編譯的時候,編譯器不是翻譯成直接呼叫test類中print()的彙編**,而是翻譯成一個查詢虛表,得到到函式的相對地址的過程。

10樓:匿名使用者

函式名就是函式的起始地址,可以直接把函式名當作函式地址使用,注意僅是函式名,帶上了括號和引數就成了呼叫。

11樓:匿名使用者

動態連結庫(.dll)

c/c++中函式的地址的問題?

12樓:匿名使用者

1、在抄引用函式名但有沒有呼叫該襲函式時

,函式名將bai被自動解釋為只想函式的du指zhi針。

2、指向函式的指標

可用於dao呼叫它所指向的函式。可以不需要使用解引用操作符,直接通過指標呼叫函式:

如:bool length***pare(const string&,const string&);

typedef bool (*cmpf**)(const string&,const string&);

cmpf** pf=lengthe***pare;

length***pare("hi","bye");//direct call

pf("hi","bye");//equivalent call: pf1 implicityly dereferenced

(*pf)("hi","bye");//equivalent call: pf1 implicityly dereferenced

13樓:幻の上帝

test是函式

名,那麼&test得到的是函式指標。指稱一個函式的函式名(函式表示式)可版以隱式轉換為對權應的函式指標;在函式呼叫時函式和指向相同函式的函式指標是等價的。所以lz的用法中test和&test沒什麼區別,p(8)和*p(8)沒什麼區別,q(8)和*q(8)也沒什麼區別。

類似的情況還有指稱整個陣列的陣列名。一元運算子&作用於陣列,得到的是陣列的首個元素的指標;而在其它許多情況下引用陣列名即得到隱式轉換成的指向首個元素的指標。

另外,lz的printf用法不規範。輸出指標用%p不是%d。

p.s.關於函式,在語言層次上c和c++的處理有些不同,例如c中雖然函式型別不是物件型別,但函式表示式通過隱式轉化為指標而成為左值;而c++中函式型別表示式也是左值。

不過表面上來看,(只用c和c++的公共特性時)c/c++中它們的行為是一致的。

====

[原創回答團]

14樓:匿名使用者

你這個函式有錯誤。不知道你想表達什麼。首先,主函式中呼叫test函式,不能沒專有引數。

其次,屬test 函式中沒有返回值,所以不能在主函式中呼叫,返回不了一個值給主函式。我猜你的意思寫了以下函式不知是否是你想要知道的。

#include

int test(int a)

void main()

15樓:匿名使用者

針對函式指標有幾點明確以後就不會有疑惑了:

1、在引用函式名但有沒有呼叫該回函式時,函式名將答被自動解釋為只想函式的指標。

2、指向函式的指標可用於呼叫它所指向的函式。可以不需要使用解引用操作符,直接通過指標呼叫函式:

如:bool length***pare(const string&,const string&);

typedef bool (*cmpf**)(const string&,const string&);

cmpf** pf=lengthe***pare;

length***pare("hi","bye");//direct call

pf("hi","bye");//equivalent call: pf1 implicityly dereferenced

(*pf)("hi","bye");//equivalent call: pf1 implicityly dereferenced

16樓:匿名使用者

一個輸出a的地址,一個是函式的地址 函式指標不是你那樣定義的。

c語言中函式名也稱為函式的指標那函式名是否

首先你上面的話是錯誤的,函式名是一段指令的入口地址,它是地址常量,不佔用記憶體空間,只是在編譯階段存在於編譯器的符號表中,例如函式的入口地址是0x123456,在翻譯成機器指令以後,函式名是不存在的其在本質上對應彙編上的jump指令,在執行函式的時候,跳轉到0x123456,這個函式名的本質就是這個...

C函式怎樣呼叫呢,C 函式的定義和呼叫方法

首先,將c 函式分為靜態函式,例項化函式。當c 函式分為靜態函式,呼叫的方式 類.靜態函式名稱 當c 函式分為例項化函式,呼叫的方式 物件.例項化函式名稱 補充一下 在本類中呼叫函式時,不管是那種函式,直接呼叫 函式名稱 即可。最簡單的就是在要呼叫的地方,直接寫函式名稱。建構函式是物件導向的程式設計...

C行內函數可以呼叫行內函數嗎

稱為成員函式 前面講過一般的成員函式,它是根據某種類的功能的需要來定義的。又講述了一些特殊的成員函式 建構函式 解構函式 拷貝初始化建構函式等。還有一些成員函式後面還會介紹。成員函式除了說明和定義在類中之外,還有些什麼特性,這是本節討論的問題。一 內聯性和外聯函式 類的成員函式可以分為行內函數和外聯...