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...