Ответ 1
Нет, поскольку функции не являются данными. Но вы можете определить указатели функций внутри структуры.
struct foo {
int a;
void (*workwithit)(struct foo *);
}
Можем ли мы определить функции в структурах на языке программирования C?
Нет, поскольку функции не являются данными. Но вы можете определить указатели функций внутри структуры.
struct foo {
int a;
void (*workwithit)(struct foo *);
}
Вы не можете действительно объявлять материал внутри структуры в C. Это не С++ или любой другой язык OO, где объект инкапсулирует какую-то область видимости.
C-структуры - очень простые объекты, это просто синтаксический сахар для управления куском памяти. Когда вы создаете новый экземпляр struct, struct A a;
, компилятор просто резервирует пространство стека в соответствии с его размером, а когда вы выполняете a.member
, компилятор знает это смещение члена, поэтому он переходит на &a
+ смещение этого члена, Эти смещения обычно представляют собой не просто суммы размеров предыдущих членов, потому что компилятор обычно добавляет в структуру некоторые биты заполнения, чтобы лучше вставить его в память.
Надеюсь, это немного помогло. Вы, очевидно, ожидаете слишком много от C-структур: -)
Нет, вы не можете иметь функции внутри struct в программе на C. Я написал один код и сохранил его как .c и .cpp. Файл .cpp соответствует и работает как ожидалось, но файл .c даже не компилируется.
Вот код для вашей справки. Сохраните его один раз как .cpp, а затем запустите его. Затем сохраните тот же код, что и .c, и скомпилируйте его. Вы получите ошибки компиляции.
#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);
}
Нет.
У вас могут быть указатели на функции в структурах, но они находятся как можно ближе.
Нет, вы не можете. Структуры могут содержать только переменные внутри, сохранение указателей функций внутри структуры может дать желаемый результат.
Нет. Вы не можете определять функции внутри структур в программах на C. Однако, если расширение вашего файла является .cpp(, а не C), у вас может быть член функции, такие как классы, однако модификатор по умолчанию этих функций будет "общедоступным" (в отличие от класса).
Прочтите эти ссылки для получения дополнительной информации о Структуры хорошая ссылка, другое хорошая ссылка, Еще одна хорошая ссылка
В качестве соглашения в С++ для хранения функций и переменных используются Классы, а Структуры используются только для хранения информации (т.е. данных).
Нет, но вы можете в С++ struct!
Вместо этого вы можете в C++:
// Example program
#include <iostream>
#include <string>
struct Node
{
int data; Node *prev,*next;
Node(int x, Node* prev=NULL, Node* next=NULL)
{
this->data=x; this->prev=prev; this->next=next;
}
void print_list()
{
Node* temp=this; //temp is created in function call stack
while(temp!=NULL)
{
std::cout<<temp->data<<" ";
temp=temp->next;
}
}
Node* insert_left(int x)
{
Node* temp=new Node(x,this->prev,this);
this->prev=temp;
return temp; //list gets new head
}
Node* insert_right(int x)
{
Node* temp=new Node(x,this,this->next);
this->next=temp;
return this; //this would still be head
}
};
int main()
{
Node* head=new Node(-1); //-1
head=head->insert_left(0); //0 -1
head=head->insert_right(1); //0 1 -1
head=head->insert_left(2); //2 0 1 -1
head->print_list();
}