1. 程式人生 > >c語言函式指標的理解與使用

c語言函式指標的理解與使用

文章轉自  http://www.cnblogs.com/haore147/p/3647262.html

覺得寫的很不錯,轉一份留用

1.函式指標的定義


  顧名思義,函式指標就是函式的指標。它是一個指標,指向一個函式。看例子:

1 2 3 A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2);

看看上面三個表示式分別是什麼意思?


C)這很容易,fun3是函式名,p1,p2是引數,其型別為char *型,函式的返回值為char *型別。
B) 也很簡單,與C)表示式相比,唯一不同的就是函式的返回值型別為char**,是個二級指標。
A) fun1是函式名嗎?回憶一下前面講解陣列指標時的情形。我們說陣列指標這麼定義或許更清晰:

1 int (*)[10] p;

再看看A)表示式與這裡何其相似!明白了吧。這裡fun1不是什麼函式名,而是一個指標變數,它指向一個函式。這個函式有兩個指標型別的引數,函式的返回值也是一個指標。同樣,我們把這個表示式改寫一下:

1 char * (*)(char * p1,char * p2) fun1;

這樣子是不是好看一些呢?只可惜編譯器不這麼想。^_^。

2.函式指標使用的例子


  上面我們定義了一個函式指標,但如何來使用它呢?先看如下例子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> #include <string.h> char * fun(char * p1,char * p2) { int i = 

相關推薦

c語言函式指標理解使用

文章轉自  http://www.cnblogs.com/haore147/p/3647262.html 覺得寫的很不錯,轉一份留用 1.函式指標的定義   顧名思義,函式指標就是函式的指標。它是一個指標,指向一個函式。看例子:

C語言 函式指標呼叫時加星號不加星號?

函式指標在賦值以後,例如通過庫動態載入方式,然後在使用時,程式呼叫遇到了既加星號,也有不加星號的方式,因此有點疑惑。 先上例項,再作分析 #include <stdio.h> void myfun(void); int main(void) { void (*pf)(void); p

深入淺出剖析C語言函式指標回撥函式(一)

關於靜態庫和動態庫的使用和製作方法。http://blog.csdn.net/morixinguan/article/details/52451612今天我們要搞明白的一個概念叫回調函式。什麼是回撥函式?百度的權威解釋如下:回撥函式就是一個通過函式指標呼叫的函式。如果你把函式

C語言-函式指標函式名的區別

記得大學時老師曾說函式的函式名是函式的入口的指標,之前看block通過clang編譯生成的C程式碼發現很多函式指標,於是想了解函式指標與函式名有什麼區別?以及函式指標一般都有些什麼作用。函式指標與函式名的區別首先先定義一函式以及一個指向蓋函式的函式指標,並分別對他們進行呼叫。

深入理解C語言函式指標

我們一開始只是從功能上或者說從數學意義上理解myFun這個函式,知道myFun函式名代表的是一個功能(或是說一段程式碼)。函式名到底又是什麼東西呢?函式指標變數     一個數據變數的記憶體地址可以儲存在相應的指標變數中,函式的首地址也以儲存在某個函式指標變數中。這樣,我就可以通過這個函式指標變數來呼叫所指向

C語言 函式指標 和 typedef

函式 函式一般遵循的格式:函式的返回型別、函式名、引數列表; void func(void) --> 對應的指標 void (*P)(void) typedef定義函式指標 typedef int (*funptr)(int,int) // typedef行 int (*

C語言 函式指標 函式指標陣列的用法

前述:C語言的奧祕,博大精深,今天來回憶的分析函式指標,函式指標陣列的用法。具體請見下面一個註冊程式的實現。     1 #include <stdio.h> 2 #include &

C語言 函式指標的例子

#include <stdio.h> typedef struct Foo { int a; int b; }Foo_t; struct Foo f; void *vp; int max(Foo_t *ef,int c) { return ((ef-

C語言函式指標實現多型特性

1、函式指標 函式指標是指向函式的指標變數,本質上是一個指標,類似於int*,只不過它是指向一個函式的入口地址。有了指向函式的指標變數後,就可以用該指標變數呼叫函式,就如同用指標變數引用其他型別變數一樣。 指標函式一般有兩個作用:呼叫函式和做函式的引數。 2、函式指標實現多

Android JNI程式設計(六)——C語言函式指標、Unition聯合體、列舉、Typedef別名、結構體、結構體指標

一:函式指標 1.函式指標顧名思義就是定義一個指標變數指向一個函式,和一級指標並沒有很大的區別我們看如下程式碼就很清楚的知道了 #include<stdio.h> #include<stdlib.h> //定義一個函式 in

C語言函式指標宣告

因為C語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是一個既著名又常用的方法。不過,右左法則其實並不是 C標準裡面的內容,它是從C標準的宣告規定中歸納出來的方法。C標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識一個宣告的,兩者可以說是相反的。右左法

C語言-函式指標

1 函式指標 函式原型: int sum(int a, int b); 函式指標: int (*psum)(int,int)=sum; 通過函式指標呼叫函式: int resul

C語言函式指標例子

函式指標 // ConsoleApplication2.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include "stdio.h" #pragma warning(disable:4996)

C語言實現動態陣列 C語言函式指標和回撥函式

實現任意資料型別的動態陣列的初始化,插入,刪除(按值刪除;按位置刪除),銷燬功能。、 動態陣列結構體   實現動態陣列結構體的三個要素:(1)陣列首地址;(2)陣列的大小;(3)當前陣列元素的個數。 1 //動態陣列結構體 2 struct DynamicArray{ 3 void **a

誤人子弟篇之C語言函式返回值引數傳遞

寫在開頭以免看到結尾你,此篇部落格純屬瞎扯,看看就可以了,不要當真哦! 如果搞過彙編,寫過子程式,那麼你就不用看了,因為看到最後你會發現,在彙編中你有很多方法去返回值,傳遞引數,而在高階語言中,編譯器只是選擇了其中的一種而已,而這篇部落格也寫的毫無邏輯,簡直喪盡天良,草菅人

C語言/函式指標

#include<stdio.h> void function(){ printf("hello,world\n"); } int main(){ void (*p)() = function; p(); (*function)(); printf(

C語言函式指標陣列在ARM中斷中的應用

一、函式指標的宣告與初始化 ... int max_fun(int a, int b); /*函式指標的宣告,聲明瞭兩個形參都為int型別,返回值為int型別的函式指標*/ int (*fp)(i

C語言指標陣列陣列指標的區別

指標陣列是指:存放指標的陣列 陣列指標是指:指向一個數組的指標(是指標變數) 下面具體分析一下: (1)指標陣列:int *p[10]; 因為[ ]的優先順序高,所以[ ]先與p結合成為一個數組,然後這個陣列的型別為int*,也就是整形指標,該陣列含有10個指標型別的陣

c語言函式指標學習心得

顧名思義,指標函式即返回指標的函式。其一般定義形式如下: 型別名*函式名(函式引數表列); 其中,字尾運算子括號“()”表示這是一個函式,其字首運算子星號“*”表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到一個“指向返回值為

關於C語言函式指標的隨筆

今天博主在編譯C語言程式碼的時候,遇到了兩個警告: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] 和 warning: f