C語言進階程式設計——函數指標,程式設計函數指標
函數指標指向代碼區,普通指標指向資料區。函數指標定義如下:傳回型別 (*函數指標變數)(參數表)例如,void (*pf)()指向形如void f()這樣的函數。使用函數指標的例子:
void open();//對幾個函式宣告void print();void exit();void (*pfs[])()={open,print,exit};//函數指標數組int main(){int i;void (*pf)();pf=open;(*pf)();//////調用open()for(i=0;i<3;i++)////依次調用open()、print()、exit()函數(*pfs[i])();}void open(){printf("open\n");}void print(){printf("print\n");}void exit(){printf("exit\n");}從這個例子可以看出,函數名本身就是函數代碼區的地址。還有幾個容易混淆的定義,考慮下面幾個定義:
void (*getInterrupt(int no))();void setInterrupt(int no,void (*pf));LRESULT (*lpfnWndProc)(HWND,UNIT,WPARM,LPARAM);
第一個聲明表示getInterrupt的原型聲明,它有一個int類型的參數,返回值是指向類似void f()函數的指標。其實getInterrupt(int no)運行後就是這個函數的返回值.第二個聲明表示函數setInterrupt的原型聲明,返回值是void,它有兩個參數,類型分別是int和指向void f()函數的指標。第三個聲明定義了一個指標變數lpfnWndProc,指向形如LRESULT wndproc(HWND,UNIT,WPARM,LPARAM)的函數。
c語言程式設計,函數與指標,幫忙編寫幾道題
1請編寫函數fun,其功能是計算並輸出n門課程的平均值,並統計在平均值以上的課程個數,該個數作為函數值返回。
int fun(float a[],int n)
{
double sum = 0.0;
double ave = 0.0;
int count = 0;
for(int i = 0;i < n;i ++)
sum += a[i];
ave = sum/n;
for(int i = 0;i < n;i ++)
if(a[i] >= ave)
count ++;
return count;
}
2請編寫函數fun,其功能是:求出1到m之間(含m)能被7或11整除的所有整數放在數組a中,通過n返回這些
void fun(int m,int *a,int *n)
{
*n = 0;
for(int i = 1;i <= m;i ++)
{
if(i%7 == 0 && i%11 == 0)
{
a[*n] = i;
(*n) ++;
}
}
}
3編寫函數fun,統計在tt所指字串中a到z這26個小寫字母各自出現的次數,並依次存放在pp所指的數組中.
void fun(char *tt,int pp[])
{
for(int i = 0;i < 26;i++)
pp[i] = 0;
for(int i = 0;i < strlen(tt);i++)
{
pp[tt[i] - 'a']++;
}
}
4.請編寫函數fun,其功能是:將ss所指字串中所有下標為奇數位置上的字母轉換為大寫(若該位置上不是字母,則不轉換).
void fun(char *ss)
{
for(int i = 1;i < strlen(ss);i+=2)
{
if(ss[i] <= 'z' && ss[i] >='a')
{
ss[i] += 'A' - 'a';
}
}
}
5請編寫函數fun,用來刪除字串中的所有空格.
void fun(char *str)
{
int count = 0;
for(int i = 0;i < strlen(str);i++)
{
if(str[i] != ' ')
{
str[count] = str[i];
count ++;
}
else
{
str[count] = 0;
}
}
}
C語言指標指向函數編程練習
#include "stdio.h"//
void fun0(int n){
printf("這是%d號函數的列印輸出。\n",n+1);
}
void fun1(int n){
printf("這是%d號函數的列印輸出。\n",n+1);
}
void fun2(int n){
printf("這是%d號函數的列印輸出。\n",n+1);
}
void main(void){
void (*ptr[3])(int)={fun0,fun1,fun2};
int n;
printf("Type 1,2 or 3\nn=");
scanf("%d",&n);
n--;
ptr[n](n);
printf("\n");
}