c語言調用函數指針

並不是不規范的問題,你子程序寫法只能在子程序中輸出正確的數據,而在主函數中無法得到交換過的x和y的值。參考程序運用指針讓子程序去讀寫a和b的值,在子程序執行完成後,a和b的值確實得到了交換。

你的程序中子程序採用的不是指針類型參數,這樣子程序無法將交換過後的值傳回來。

⑵ c語言指針函數和函數指針有什麼不同

如樓上所說 。
指針函數 的本質是 函數 ,只是他的返回值 類型 是指針變數。
比如 int * A(int num); 這就是一個 指針函數。
函數指針 是一個 指針變數 ,只不過 他是 指向函數的 指針變數。
比如 有函數定義 如上 int * A(int num); 再有 int (*pf)(int num);
則是 pf = A;就把 函數A的首地址 賦值給 pf 函數指針了。

⑶ C語言函數指針

C語言函數前面加個指針 表示函數的返回值是指針類型的。實例: #include using namespace std; int* lpfun1(int,int); //聲明一個返回指針為int類型的函數 void main() { int *result=lpfun1(10,20); printf("%d\n",*result); delete result;//刪除堆中的指針 result=0;//使指針無效 } int* lpfun1(int x,int y) { int *p=new int(0); *p=x+y; return p; }

⑷ c語言中函數指針是什麼 有什麼用 舉個實例

函數指針是指向函數的指針變數。 因而「函數指針」本身首先應是指針變數,只不過該指針變數指向函數。這正如用指針變數可指向整型變數、字元型、數組一樣,這里是指向函數。

函數指針有兩個用途:調用函數和做函數的參數。


函數指針的聲明方法為:

返回值類型 ( *指針變數名) ([形參列表]);

如:

int func(int x); /* 聲明一個函數 */

int (*f) (int x); /* 聲明一個函數指針 */

f=func; /* 將func函數的首地址賦給指針f */

或者使用下面的方法將函數地址賦給函數指針:

f = &func;

賦值時函數func不帶括弧,也不帶參數,由於func代表函數的首地址,因此經過賦值以後,指針f就指向函數func(x)的代碼的首地址。

下面的程序說明了函數指針調用函數的方法:

#include<stdio.h>
intmax(intx,inty){return(x>y?x:y);}
intmain()
{
int(*ptr)(int,int);
inta,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
return0;
}

⑸ c語言的函數指針舉個例子

函數指針 就是指向函數的指針

比如

voidpr_int(inta)//函數
{
printf("%d ",a);
}
voidfunc(void(*p)(int),intm)//函數指針做參數
{
p(m);//調用函數指針
}
intmain()
{
func(pr_int,100);
return0;
}

⑹ C語言中函數指針用法

在C語言中,指針被廣泛使用,而函數指針是最為高級的用法之一,也是容易疑惑的地方之一。看下面這段代碼:#include <stdio.h>void F(int a, int* output)
{
printf("a = %d\n", a);
*output = a + 1;
}typedef void (*FUNC)();int main()
{
FUNC f = F;
int ret = 0;
f(3, &ret);printf("ret = %d\n", ret);
return 0;
}上面看出 FUNC 的類型是與F的類型不匹配的,這樣可以通過編譯嗎?答案是: 可以的。由於在C語言中編譯函數的時候,是僅僅將其函數名作為該函數的
唯一標識,為其分配相應地址。所以雖然FUNC 與 F的類型不一致,但是對於編譯器看來
都是兩個地址,是無所謂的。用上面的特點,可以寫出非常通用的函數指針類型,typedef int (*FUNC)(); 這里之所有要有返回值,是用來標識該函數是否執行成功的錯誤代碼標志。 隨說做了有一段時間的C了,但盡然沒有搞明白函數指針的用法,見到了也沒有好好研究,今天終於有時間了,在網上搜了一下,終於弄懂了.原來就是定義了一個指針變數,只不過形式有點怪罷了.其實還是當成指針用就行了!一般有兩種用法:1定義函數指針int (*functionPoint)(int, int)----這只是定義了一個指向函數的指針int a(int a,int b)----------------這是與之相符的函數原型void main()-----------------------使用{ functionPoint = a;------------先賦值 functionPoint(1,2);----------調用
}2用typedef定義使用typedef int (*functionPoint)(int,int);----------定義了一種類型名為functionPoint的指針int a(int a, int b)-----------------------------函數原型void main(){ functionPoint fun;---------------------------定義指針 fun = a;-------------------------------------賦值 fun(1,2);---------------------------------使用
}函數就是這個函數的指針.

⑺ C語言指針函數

不是這樣

match函數名前的char* 是表示match函數結束時返回的值是一個字元專串(char*), 如果把match前的*去掉, 即 char match( ......), 是表示match函數返屬回的值是一個字元(char), 那麼你在match函數最後的return 語句要用相對應的數據類型

⑻ C語言中的函數指針

函數指針是定義一個指向函數的指針,形式為:void (*p)(void);
一般用法:
int fun1(int x);
int fun2(int x);
char fun3(int x);
int fun4(char x);
int main(void)
{
int (*p)(int x);
p=fun1; //指向fun1
p(2) //這時等價於fun1(2)
p=fun2; //也可以指向fun2


但是注意了,p=fun3;和p=fun4都是錯誤的,參數類型跟返回類型必須一樣。

至於指針函數,就是返回一個指針的函數。
基本形式:int *fun(void);
一般用法:
int *fun(void);
int main(void)
{
int *p=NULL; //聲明一個整型指針變數
p=fun(); //接收fun()的返回值

⑼ C語言函數指針定義

在最上面加一句這樣的定義
typedef void*(*pFn)();
pFn可以這樣理解:首先pFn是一個指針,指針指專向一屬個函數(或者說pFn是一個函數指針),此函數返回一個無類型的指針。最終定義的變數及函數都是指針罷了,不過是指針的類型不同。所以在編譯時會有警告,說指針類型不匹配。但對於程序來講,都是可以在特定的上下文中使用的。
運行結果是
t1,t2交替出現。

其實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 ;
}

⑽ C語言函數指針怎麼用

有函數: int fun(int a,int b);
要定義指向該函數的指針
對比指向 int a; 的指針
int *p; p = &a;
p的定義是怎麼來的?
首先要保證p是一專個指針類型屬
寫下(*p),
然後,考慮下p的基類型,
p的基類型就是變數a的類型int
將int 放在(*p)前面就行了
int (*p);
括弧可以省略,就成了 int *p;

同理
想要實現 pf = &fun;
(*pf) 將pf定義為一個指針,
將fun的類型作為pf的基類型
fun相當於一個 int (int a,int b)類型的量
int (int a,int b) (*pf);
基類型中有圓括弧和中括弧要後移
int (*pf)(int a,int b) ;//括弧不能省略
pf = &fun;
調用時
(*pf)(3,4); pf(3,4)都可以