В с++ в структуре элементам присваивается ноль, а когда я пытаюсь сделать это в си, мне выдает ошибку, как можно исправить/заменить?
struct example {example *p=NULL;}
И еще один пример из с++, который не работает на си, когда вызываю функцию, выдает ошибку на "*&"
void function(spis *&h);
В C в отличии от C++ вы не можете в объявлении структуры указывать инициализаторы.
Поэтому данное объявление структуры
struct example {example *p=NULL;};
не будет компилироваться. Более того в C данное объявление также некорректно по другой причине: имя example не является именем структуры. Необходимо его предварить ключевым словом struct. Например
struct example { struct example *p; };
В принципе нет необходимости использовать инициализатор внутри объявления структуры. Вы всегда можете инициализировать соответствующие поля при создании объекта структуры или присвоить им значения уже после создания объекта структуры. Например,
includeВ C:
struct example
{
struct example *p;
};
int main( void )
{
struct example list = { NULL };
}
Или
#include <stdlib.h>
struct example
{
struct example *p;
};
int main( void )
{
struct example *list = malloc( sizeof( struct example ) );
list->p = NULL;
//...
free( list );
}
Что касается этого объявления
void function(spis *&h);
то в C++ параметр является ссылочным типом на указатель типа spis * . В C ссылочные типы отсутствуют. Для большего понимания это объявление можно переписать следующим образом в C++:
typedef spis * T;
void function(T &h );
то есть параметр h - это ссылка.
Чтобы передать объект в функцию по ссылке в C, нужно передавать его через указатель на объект.
То есть вышеприведенную функцию следует объявить следующим образом
void function(spis **h);
Такая функция будет рботать в C и в C++.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей