2013-06-25 5 views
10

In genere, viene utilizzato typedef per ottenere nomi alternativi per i tipi di dati. Per esempio -typedef int (* pf) necessita di spiegazione

typedef long int li; // li can be used now in place of long int 

Ma, che cosa fa il seguito typedef fare?

typedef int (*pf) (int, int); 
+2

[cdecl] (http://cdecl.org) per il salvataggio! – milleniumbug

+2

possibile duplicato di [puntatore funzione Typedef?] (Http://stackoverflow.com/questions/4295432/typedef-function-pointer) – user93353

+0

@milleniumbug: Hai provato? Errore di sintassi! – MatthewD

risposta

21
typedef int (*pf) (int, int); 

Ciò significa che le variabili dichiarate con il tipo pf sono puntatori a una funzione che prende due int parametri e restituisce un int.

In altre parole, si può fare qualcosa di simile:

#include <stdio.h> 

typedef int (*pf)(int,int); 

int addUp (int a, int b) { return a + b; } 

int main(void) { 
    pf xyzzy = addUp; 
    printf ("%d\n", xyzzy (19, 23)); 
    return 0; 
} 
+1

Grande esempio, +1 – lnafziger

+0

@ Yu Hao Bel esempio, grazie! – phoenix

0

Si tratta di un prototipo di puntatore a funzione. È quindi possibile dichiarare una funzione come un qualcosa di argomenti del genere:

void RegisterCallback(pf your_callback_func); 

Quindi è possibile può chiamare la funzione passata come func PTR:

... 
your_callback_func(i, j); 
... 
0

Il typedef ha il nome pf ed è per un puntatore a funzione che prende due interi come argomenti e restituisce un intero.

0

typedef opere come:

Definire unknown type con known types.

Quindi definisce il tipo di funzione che accetta due argomenti int e restituisce int.

4
typedef long int li; 

assegna nome alternativo li digitare long int.

Esattamente nello stesso modo

typedef int (*pf) (int, int); 

assegna nome alternativo pf digitare int (*) (int, int). Che tutto quello che c'è da fare.

Come probabilmente notato, le dichiarazioni typedef seguono la stessa sintassi delle dichiarazioni delle variabili, ad esempio. L'unica differenza è che il nuovo nome della variabile viene sostituito dal nuovo nome del tipo. Quindi, in accordo con la sintassi della dichiarazione C, il nome dichiarato potrebbe apparire "nel mezzo" del dichiaratore, quando sono coinvolti tipi di matrice o funzione.

Per un altro esempio

typedef int A[10]; 

dichiara A nome alternativo per tipo int [10]. In questo esempio, il nuovo nome appare anche "al centro" della dichiarazione.

+0

Ben spiegato .. :) – phoenix