2012-03-26 27 views

risposta

56

No, come funzioni non sono dati. Ma puoi definire i puntatori di funzione all'interno di una struttura.

struct foo { 
    int a; 
    void (*workwithit)(struct foo *); 
} 
2

No.

Si possono avere puntatori a funzione nelle strutture, ma questo è il più vicino si arriva.

1

No, non è possibile. Le strutture possono contenere solo variabili all'interno, la memorizzazione dei puntatori di funzioni all'interno della struttura può fornire il risultato desiderato.

0

No, non puoi definire funzioni all'interno delle strutture nei programmi C, se l'estensione del file è cpp (che non sia C), si può avere funzioni membro come le classi tuttavia il modificatore di default di questi le funzioni saranno "pubbliche" (diversamente dalla classe).

Leggere questi link per ulteriori informazioni sulle strutture a good link, another good link, One more good link

Per convenzione in C++, Classi vengono utilizzati per funzioni memorizzazione e variabili sia e Strutture sono utilizzati solo per la conservazione informazioni (es. dati).

+5

Quello che probabilmente intendevi è: "Tuttavia, se lo compili in un linguaggio di programmazione diverso chiamato C++ ..." – Lundin

+0

Hai ragione @Lundin, In realtà a livello di partenza pochi studenti si confondono scrivendo il codice C all'interno del file .cpp, questa è una pessima pratica. – aProgrammer

19

Non si può realmente dichiarare roba all'interno di una struttura in C. Questo non è C++ o qualsiasi altro linguaggio OO in cui un oggetto incapsula un tipo di ambito.

Le strutture C sono oggetti molto semplici, è solo zucchero sintattico per la gestione di un pezzo di memoria. Quando si crea una nuova "istanza" di struct, struct A a;, il compilatore riserva lo spazio in stack in base alle sue dimensioni e quando si esegue a.member, il compilatore conosce l'offset del membro, quindi passa a &a + offset di quel membro. Questi offset non sono in genere solo somme di dimensioni dei membri precedenti, perché il compilatore di solito aggiunge alcuni bit di riempimento nella struttura per allinearli in modo più gradevole alla memoria.

Spero che abbia aiutato un po '. Ovviamente ti aspetti un po 'troppo dalle strutture C :-)

4

No, non puoi avere funzioni all'interno di struct in un programma C. Ho scritto un singolo codice e l'ho salvato come .c e .cpp. Il file .cpp è conforme e funziona come previsto, ma il file .c non viene nemmeno compilato.

Ecco il codice per il vostro riferimento. Salvalo una volta come .cpp e poi eseguilo. Quindi salva lo stesso codice di .c e compila. Riceverai errori di compilazione.

#include <stdio.h> 
struct C { 
    void Test(int value) { 
     static int var = 0; 
     if (var == value) 
      printf("var == value\n"); 
     else 
      printf("var != value\n"); 

     var = value; 
    } 
}; 

int main() { 
    C c1; 
    C c2; 
    c1.Test(100); 
    c2.Test(100); 
    int ii; 
    scanf("%d",&ii); 
} 
+0

Da quando non è possibile avere ** funzioni ** all'interno ** C ** programma? – baldrs

+0

Intendevo. Struct in ac program. Corregge –

+0

Risolto il problema. Grazie –

-2

No, ma è possibile in C++ struct!

+0

Così ho risposto alla sua domanda con "No". Hai perso quella parte? – NDEthos

-1

Sì, è possibile dichiarare la funzione all'interno della struttura, fare riferimento allo snippet seguente.

#include<stdio.h> 
struct A 
{ 
     int a; 
     void (*ptr)(const struct A*); 
}; 
void display(const struct A*p) 
{ 
     //p->a = 10; //It is not possible because structure is constant 
     printf("Display fun :%d\n",p->a); 
} 
void print(struct A*ptr) 
{ 
     ptr->a = 20; 
     printf("Print fun :%d\n",ptr->a); 
} 

int main() 
{ 
     struct A obj = {5}; //Structure initialization 
     display(&obj); 
     print(&obj); 
     return 0; 
} 
Problemi correlati