char *match (char*s,char ch1,char ch2)
網站建設哪家好,找創(chuàng)新互聯建站!專注于網頁設計、網站建設、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯還提供了文峰免費建站歡迎大家使用!
函數各部分的含義:
第一個char,一般是代表函數的返回值是一個字符。但是它后面有一個*,應該把char和*連起來看,就是char*了。
那么,第一個就是char*,代表函數的返回值是一個字符指針(地址)。
match是函數的名字。
括號內是函數的參數,多個參數用逗號分隔。本例共有3個參數:char*s,char ch1,char ch2,第一個是s,類型為char*型(字符指針型),后兩個ch1、ch2都是char型(字符型)。
到這兒,你就知道去掉*match前的*為什么就不對了。
另外,括號里參數類型(如包含指針)跟函數返回值的類型無關。函數名前加不加*只與函數返回值的類型有關。
有函數: 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)都可以
函數指針告訴CPU下一步需要執(zhí)行哪里的代碼的指針, 一數組十分相像.
#include?stdio.h
void?function(int?i,?double?d)????//一個函數的聲明
{
printf("函數運行,?%d,?%lf\n",?i,?d);
}
void?AnotherFunction(int?i,?double?d)????//另外一個函數聲明
{
printf("又一個函數運行,?%d,?%lf\n",?i,?d);
}
int?main()
{
void?(*pFun)(int,?double);????//定義了一個函數指針
int?(*p)(int?,?double);????//用于調試的函數指針
pFun?=?function;????//讓這個函數指針指向第一個函數
pFun(10,?10.101);????//通過這個函數指針來調用第一個函數
pFun?=?AnotherFunction;????//讓這個函數指針指向第二個函數
pFun(20,?20.202);????//通過這個函數指針來調用第二個函數
//若將以下代碼取消注釋,?就會產生錯誤
/*
p?=?function;
p?=?AnotherFunction;
//原因很簡單,?因為p是必須指向一個返回值為int,?第一個參數為int,?第二個參數為double的函數,?但是在此代碼中定義的函數返回值是void
*/
//這個實驗中,?直接用函數名來賦值了,?是因為函數名其實就是這個函數的指針
//而在平常調用函數時,?都要加上(),?如:printf("");
//這里,?"()"就相當于'*'(就是取值運算符),?printf是函數指針,?就相當于是數組名,?即數組的首地址
return?0;
}