2012-03-26 31 views

Odpowiedz

56

Nie, ponieważ funkcje nie są danymi. Ale możesz zdefiniować wskaźniki funkcji wewnątrz struktury.

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

nr

Można mieć wskaźników funkcji w strukturach, ale to jest tak blisko, jak dostaniesz.

1

Nie, nie możesz. Struktury mogą zawierać tylko zmienne wewnątrz, przechowywanie wskaźników funkcyjnych wewnątrz struktury może dać pożądany rezultat.

0

nr, mogę zdefiniować funkcje wewnątrz struktur w programach C, jednak jeśli rozszerzenie pliku jest .cpp (że nie jest C), można mieć funkcje składowe, takie jak klasach jednak domyślnym modyfikator z nich funkcje będą "publiczne" (w przeciwieństwie do klasy).

przeczytać poniższe linki Więcej informacji na temat struktur a good link, another good link, One more good link

W konwencji w C++, Klasy służą do przechowywania funkcji i zmiennych obu i Structures służą tylko do przechowywania informacje (tj. dane).

+5

Co prawdopodobnie miałeś na myśli: "Jeśli jednak skompilujesz to w innym języku programowania o nazwie C++ ..." – Lundin

+0

Masz rację @Lundin, Właściwie na poziomie początkowym niewielu uczniów myli się, pisząc kod C w pliku .cpp, to jest naprawdę zła praktyka – aProgrammer

19

Nie można tak naprawdę zadeklarować elementów wewnątrz struktury w C. To nie jest C++ ani żaden inny język OO, w którym obiekt zawiera pewien zakres.

Struktury C to bardzo proste obiekty, to po prostu cukier syntaktyczny do zarządzania fragmentem pamięci. Kiedy utworzysz nową "instancję" struct, struct A a;, kompilator po prostu zarezerwuje przestrzeń stosu zgodnie z jej rozmiarem, a kiedy wykonasz wtedy a.member, kompilator wie, że przesunięcie elementu, to przeskoczy do &a + przesunięcie tego elementu. Przesunięcia te są zwykle nie tylko sumami rozmiarów poprzednich elementów, ponieważ kompilator zwykle dodaje do struktury trochę wypełnień, aby lepiej dopasować je do pamięci.

Mam nadzieję, że trochę pomogło. Oczywiście oczekujesz nieco zbyt wiele od C stuctures :-)

4

Nie, nie możesz mieć funkcji wewnątrz struct w programie C. Napisałem jeden kod i zapisałem go jako .c i .cpp. Plik .cpp jest zgodny i działa zgodnie z oczekiwaniami, ale plik .c nie kompiluje się nawet.

Oto kod w celach informacyjnych. Zapisz go raz jako .cpp, a następnie uruchom go. Następnie zapisz ten sam kod jak .c i skompiluj go. Otrzymasz błędy kompilacji.

#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

Od kiedy nie jest możliwe posiadanie ** funkcji ** wewnątrz ** C ** program? – baldrs

+0

Miałem na myśli: Struct in ac Program Naprawię –

+0

Naprawiono, dziękuję –

-2

Nie, ale można w C++ struct!

+0

Więc odpowiedziałem na jego pytanie "Nie", czy tęskniłeś za tą częścią? – NDEthos

-1

Tak, możesz zadeklarować funkcję wewnątrz struktury, zapoznaj się z poniższym fragmentem.

#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; 
} 
Powiązane problemy