2012-03-26 23 views

Respuesta

56

No, ya que las funciones no son datos. Pero puede definir punteros de función dentro de una estructura.

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

Usted puede tener punteros a funciones en estructuras, pero eso es lo más cerca que se obtiene.

1

No, no puede. Las estructuras solo pueden contener variables en el interior, el almacenamiento de punteros de función dentro de la estructura puede darte el resultado deseado.

0

Sin, Usted no puede definir funciones dentro de las estructuras de los programas en C, Sin embargo, si la extensión del archivo es .cpp (que no es C), puede tener funciones miembro como clases sin embargo, el modificador por defecto de éstos las funciones serán 'públicas' (a diferencia de la clase).

Lea estos enlaces para obtener más información sobre las estructuras a good link, another good link, One more good link

Como convención en C++, Clases se utilizan para Guardando funciones y variables tanto y Estructuras se utilizan únicamente para conservar información (es decir, datos).

+5

Lo que probablemente quiso decir es: "Sin embargo, si compila esto en un lenguaje de programación diferente llamado C++ ..." – Lundin

+0

Tienes razón @Lundin, en realidad en el nivel inicial, pocos estudiantes se confunden escribiendo el código C dentro del archivo .cpp, eso es realmente una mala práctica. – aProgrammer

19

Realmente no se puede declarar cosas dentro de una estructura en C. Esto no es C++ o cualquier otro lenguaje OO donde un objeto encapsula algún tipo de ámbito.

Las estructuras C son objetos muy simples, es solo azúcar sintáctico para administrar una pieza de memoria. Cuando crea una nueva "instancia" de estructura, struct A a;, el compilador solo reserva el espacio de pila de acuerdo con su tamaño, y cuando hace a.member, el compilador conoce el desplazamiento de ese miembro, por lo que salta a &a + desplazamiento de ese miembro. Esas compensaciones generalmente no son solo sumas de tamaños de miembros anteriores, porque el compilador normalmente agrega algunos bits de relleno en la estructura para alinearlo mejor en la memoria.

Espero que haya ayudado un poco. Obviamente, espera demasiado de las estructuras C :-)

4

No, no puede tener funciones dentro de struct en un programa C. Escribí un código único y lo guardé como .c y .cpp. El archivo .cpp cumple y funciona como se esperaba, pero el archivo .c ni siquiera se compila.

Aquí está el código para su referencia. Guárdelo una vez como .cpp y luego ejecútelo. A continuación, guarde el mismo código que .c y compílelo. Obtendrás un error de compilación.

#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

Dado que cuando no es posible tener ** funciones ** dentro ** C ** program? – baldrs

+0

Quise decir. Struct en el programa de ca. Corregirá –

+0

Se corrigió. Gracias. –

-2

No, pero puedes en C++ struct!

+0

Así que respondí su pregunta con "No," ¿Te perdiste esa parte? – NDEthos

-1

Sí, puede declarar la función dentro de la estructura, consulte el siguiente fragmento.

#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; 
}