Динамическое распределение структурных переменных - PullRequest
0 голосов
/ 27 января 2019

Ниже описан метод динамического выделения памяти, который я выучил,

int *p = new int; 

т.е.

pointer-variable = new data-type;

Однако в другой программе со связанным списком я увидел замедление структуры

struct node
{
    int info;
    struct node *next;
}

И объявление его экземпляра было похоже на

struct node *temp, *s;
temp = new(struct node);

Я имею в виду, что это должно быть неправильно, потому что в соответствии с синтаксисом оно не должно включать struct, оно должно быть таким

node *temp, *s;
    temp = new node ;

Где я не прав, может кто-нибудь подсказать, пожалуйста?

Это исходный код , см. Код в строке №.125 и 126.

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Ваш вопрос не имеет ничего общего с динамическим размещением.

Когда вы говорите struct node { ... }; в C ++, он создает два имени типа, node и struct node, оба ссылаются на один и тот же тип.:

node x;
struct node y;  // x and y are variables of the same type

Причиной этого немного странного поведения является то, что C ++ был основан на C. В C struct node { ... }; создает только одно имя типа struct node.Вы должны использовать typedef вручную, чтобы получить более короткое имя, которое не включает struct:

typedef struct node { ... } node;  // C

C ++ хотел упростить создание коротких имен типов без необходимости везде вводить struct, покав то же время сохраняя совместимость с существующим кодом C.

(Также есть общая unix-функция, называемая stat, которая принимает указатель на структуру, также называемую stat:

int stat(const char *, struct stat *);

Здесь struct stat однозначно относится к типу, а не к функции. C ++ должен был поддерживать этот синтаксис для возможности вызова stat.)

Ваш код написан в странном C-подобном стиле(который включает в себя ключевое слово struct везде), но new не существует в C, поэтому он не может быть фактическим C.

0 голосов
/ 27 января 2019

// ИСПОЛЬЗУЙТЕ КОД, КАК ЭТО .....

struct node *temp, *s;
temp = (struct node*) new(struct node);

// так как temp является указателем на структурный узел, поэтому нам нужно типизировать его перед назначением ..

0 голосов
/ 27 января 2019
node *temp, *s;
temp = new node ;

Это синтаксис для динамического выделения памяти в C ++

Однако,

struct node *temp, *s;
temp = (node*)malloc(sizeof(struct node));  

Это синтаксис, используемый в C В C ключевое слово struct должнозаписывается перед именем структуры.

ключевое слово 'new' отсутствует в C.

...