當前位置:首頁 » 編程語言 » c語言中調用高數指針
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中調用高數指針

發布時間: 2022-05-03 05:37:46

1. c語言指針與函數調用

#include<stdio.h>
#include<stdlib.h>
intave(intn,int*a);
intmain()
{
inti,n,*a;
printf("pleaseinputnumbern:");
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int));
printf("pleaseinput%dnumbers: ",n);
for(i=0;i<n;i++)
scanf("%d",a+i);
printf("Theaveragenumberis%d ",ave(n,a));
}
intave(intn,int*a)
{
inti,sum=0;
for(i=0;i<n;i++)
sum+=*(a+i);
returnsum/n;
}

2. 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;
}

3. C語言指向函數的指針的調用

#include<stdio.h>

int *d_bubblesort(int a[],int n)//數組長度為n的冒泡降序排序
{
int i,j;
int temp;
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j]>a[j-1])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}

}
}
return a;
}

void main()
{
int i;
int *p=NULL;
int a[10]={6,5,4,1,2,3,9,8,7,10};
int *(*fun)(int*,int);
fun=d_bubblesort;
p=fun(a,10);
for(i=0;i<10;i++)
{
printf("%d\t",p[i]);
}
}

4. C語言調用函數指針

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

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

5. 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)都可以

6. c語言函數指針的作用。

C語言中函數指針與普通指針沒什麼差別,只是指向的內容不同而已。主要作用:

1、實現面向對象編程中的多態性。

2、回調函數。

7. 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()的返回值

8. 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);---------------------------------使用
}函數就是這個函數的指針.

9. C語言中調用函數指針佔用哪裡的存儲空間,被調函數運行時內部變數存在哪裡,和直接調用函數有什麼區別

在程序運行時,一個函數佔用一段連續的內存。當調用一個函數時,實際上是跳轉到函數的入口地址,執行函數體的代碼,完成後返回。
函數指針指向一個函數的入口地址,也就是函數存儲空間的首地址。
在C語言中,數組名代表數組的首地址,同樣函數名代表了函數的首地址,因此在賦值時,直接將函數指針指向函數名就行了。

因此函數指針調用vs直接調用,佔用的存儲空間都是一樣的。相當於數組指針和數組名的關系,指向的都是同一個數組。
局部變數存在函數體裡面,比如轉換成8086匯編(示意):
func: 定義變數
push ax
pop ax
ret
main: call func

滿意請採納,謝謝!

10. C語言函數指針調用

void point(char *p){ p+=3; } //加上void比較好

char b[4]={'a','b','c','d'}, *p=b; //寫在同一行,p是char*的

point(p);// 這里傳遞的是指針,在函數裡面改指針是「臨時變數」,不是局部變數
//臨時對象不會被記錄,如果改p指向的內存就可以被記錄。

printf("%c\n", *p); // 輸出結果為a,因為p是扔指向b[]其實位置

答案為a