C 中指標函式與返回指標的函式有什麼區別

2023-01-02 16:25:50 字數 4650 閱讀 4038

1樓:天昊的回憶

1全部呵呵 指標函式與返回指標的函式是指的同乙個東西需要辨析的應該是 「指標函式與函式指標有什麼區別?」

函式指標宣告為指標,它與變數指標不同之處是,它不是指向變數,而是指向函式。

函式指標有兩個用途:呼叫函式和做函式的引數.

2樓:々那天花謝

乙個意思,倒是有乙個指向函式的指標和函式指標的區別 int *put(int,int)//指標函式

int (*put)(int,int)//指向函式的指標,可以指向一些具有兩個int引數且返回型別為int的函式,利用這個指標代替

3樓:匿名使用者

指標函式帶有*(指標)的函式 如void *a()

返回指標的函式int *a()

4樓:韓濤董青

指標函式就是乙個返回指標的函式~~~

5樓:孤松獨海

一、指標函式

當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。

格式:型別說明符 * 函式名(引數)

當然了,由於返回的是乙個位址,所以型別說明符一般都是int。

例如:int *getdate();

int * aaa(int,int);

函式返回的是乙個位址值,經常使用在返回陣列的某一元素位址上。

int * getdate(int wk,int dy);

main()

while(wk<1||wk>5||dy<1||dy>7);

printf(%d\n,*getdate(wk,dy));

}int * getdate(int wk,int dy),,

}程式應該是很好理解的,子函式返回的是陣列某元素的位址。輸出的是這個位址裡的值。

二、函式指標

指向函式的指標包含了函式的位址,可以通過它來呼叫函式。宣告格式如下:

型別說明符 (*函式名)(引數)

其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向乙個返回整型值的函式。指標的宣告筆削和它指向函式的宣告保持一致。

指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。

例如:void (*fptr)();

把函式的位址賦值給函式指標,可以採用下面兩種形式:

fptr=&function;

fptr=function;

取位址運算子&不是必需的,因為單單乙個函式識別符號就標號表示了它的位址,如果是函式呼叫,還必須包含乙個圓括號括起來的參數列。

可以採用如下兩種方式來通過指標呼叫函式:

x=(*fptr)();

x=fptr();

第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉乙個例子:

void (*funcp)();

void filefunc(),editfunc();

main()

void filefunc()

void editfunc()

程式輸出為:

filefunc

editfunc

c++中指標函式和函式指標的概念和區別

6樓:匿名使用者

int (*p)(int,int);  //定義乙個函式指標p,只能指向返回值為int,形參為兩個int的函式

返回指標的函式:乙個函式,他的返回值是指標,比如:

int *p(int,int);

這是乙個形參為兩個int型別,返回值是int型指標的函式

c/c++函式指標與指標函式等區別

7樓:處搖胼手胝足

函式指標是指標,指向該函式入口位址的指標;

指標函式是函式,返回指標型別的函式;

函式指標與指標函式返回值的區別是什麼?

8樓:我是乙個麻瓜啊

指標函式是指帶指標的函式,即本質是乙個函式。函式返回型別是某一型別的指標。

型別識別符號    *函式名(參數列)

int *f(x,y);

函式指標是指向函式的指標變數,即本質是乙個指標變數。

int (*f) (int x); /* 宣告乙個函式指標 */f=func; /* 將func函式的首位址賦給指標f */主要的區別是乙個是指標變數,乙個是函式。在使用是必要要搞清楚才能正確使用。

c++ 中函式返回值如果跟類相關的話,一般是直接返回類還是返回類的指標?

9樓:匿名使用者

返回類的指標會有生命期的問題。我認為常見情況是直接返回物件

c++中怎麼在類中定義乙個返回指標的函式

10樓:匿名使用者

#include

using namespace std;

class list;

struct node;

node* staddend(node*head,data data);

private:

static node * head;

};//外面試用類中類時,要加list::

list::node* list::staddend(list::node*head,list::data data){}

int main()

其實還是建議把data和node的定義放到list前面。

11樓:匿名使用者

list::node* list::staddend(list::node*head,list::data data)

在c/c++語言裡面,是否可以返回乙個函式指標?有什麼意義

12樓:聖吻之櫺

可以!!!它的意義就是作死!!型別寫出來可能自己都要看半天才可以懂!!!

c++函式中的 指標引數跟位址引數區別

13樓:湯靈杉

chat(int&a);

chat(int *a);

這兩個函式是完全不同意義的東西,你的理解主要是在int&a和int* a這個型別上面。要注意int&和int*是兩個完全不同的型別。int&是引用型別,而int*是指向int型別變數的指標型別。

void chat(int&a)

呼叫此函式:

int x=100;

chat(x); // 此時x的值變為20了

如果函式如下:

void chat (int*a)

呼叫:int x=10;

chat(&x); //此時x的值也會變為20;

這是他們有聯絡的地方,也就是他們都可以在函式裡面改變外面變數的值,但是這兩個的引數傳遞方式是不一樣的void chat(int&a)這個函式是引用傳遞,而void chat(int*a);這個函式是值傳遞(雖然其傳遞的值是位址值,但是還是值傳遞)。

這個引用型別應該怎麼理解呢? 我是這樣理解的:int a=100;那麼a到底是個什麼東西,我們說a使我們定義的乙個變數,那麼變數又是個什麼東西呢,不知道你有沒有想過,我們不談編譯原理,但是你可以將a看成是這麼乙個東西,a代表了一塊記憶體空間,注意:

是一塊記憶體空間,也就是說這一塊記憶體空間可能由乙個或多個位元組組成,那麼在vc++ 6.0中,int型別的變數佔4個位元組,所以a代表了4個位元組的連續的記憶體空間。那麼int &b=a;定義了這一句之後,b和a一樣都代表了那4個位元組的記憶體空間了。

再看看int *c=&a;此時c是什麼呢?c也代表了一塊記憶體空間,在vc ++6.0中int*型別的變數佔4個位元組的記憶體空間,所以c代表了乙個連續的4個位元組的記憶體空間,在其內部放的值就是a代表的那塊記憶體空間的第乙個位元組的位址值。

所以我們向chat(int&a)傳遞引數的時候例如chat(x)此時a與x同樣代表一塊記憶體空間,而chat(int*a)呼叫的時候:chat(&x);此時a裡面的值就是&x,也就是x代表的記憶體的首位址。

所以你要明白,他們不是傳遞的都是位址!!!!! 在c++中位址和引用不是乙個東西!!!

14樓:玉中半

位址引數存在棧中,指標存在堆中

15樓:匿名使用者

第乙個引數是乙個link型別的引用,而不是位址形參引用傳遞指向實參,不產生副本

指標傳遞產生乙個指標副本,該指標指向實參

普通引數產生乙個副本,該副本儲存了實參的值

16樓:匿名使用者

你要明白指標就是位址這個概念,其實, 指標就是一類變數,是一類包含了其他變數或函式的位址的變數。與其他變數所不同的是,一般的變數包含的是實際的真實的資料,而指標是乙個指示器,它告訴程式在記憶體的哪塊區域可以找到資料。

因此,你所引用的第乙個函式中的引數&a,本身就是乙個指標,所以跟第二個函式中的是一樣的

17樓:匿名使用者

兩個函式的宣告不一樣的,

第乙個是以乙個link型別的引用作為函式引數。

第二個是以乙個link型別的指標作為引數,這個是傳位址。

C 函式指標

其實這部分就是c語言裡面的指標問題,是純的c語言,p max 就是乙個讓指標p指向函式max,於是max就是乙個指標函式,就是指標代表max函式,p a,b 就是用 p表示max函式,並沒有傳遞關係 因為p p p等等 它們的位址都是一樣的,你可以這樣列印出來看看 printf p p n p pr...

C語言這個F函式再指標C語言指標問題

28f為傳值呼叫。所以f中的修改不影響main中變數的值。輸出的還是原始值。即 4,3,5 選d29 a 4b a q b w q b q null a q 0 由於q已經賦值為null,再對 q賦值會引起程式崩潰。這個不對 b w p 指標間賦值,正確。c p a 也就是a a 正確。d p w ...

C語言指標函式替換字元

下面的程式可以把句子中所有的an都換成a。include main printf s n a 輸出字串要用 s 字串替換,需要兩層迴圈判斷 char replace char source,char sub,char rep 如果沒找到子串,下面複製source所指位元組到結果串 pc1 sourc...