2010-04-27 5 views
4

Это, вероятно, один из самого простого вопроса когда-либо в языке программирования C ...Как я могу объявить структуру указателя, используя {}?

У меня есть следующий код:

typedef struct node 
{ 
    int data; 
    struct node * after; 
    struct node * before; 
}node; 

struct node head = {10,&head,&head}; 

Есть ли способ, что я могу сделать голова, чтобы быть * голова [это сделать указатель] и по-прежнему иметь возможность использовать '{}' [{10, & head, & head}], чтобы объявить экземпляр главы и все еще оставить его в глобальной области видимости?

Например:

//not legal!!! 
struct node *head = {10,&head,&head}; 

ответ

7

Решение 1:

#include <stdlib.h> 
#include <stdio.h> 


typedef struct node 
{ 
    int data; 
    struct node * after; 
    struct node * before; 
}node; 
int main() { 

    struct node* head = (struct node *)malloc(sizeof(struct node)); //allocate memory 
    *head = (struct node){10,head,head}; //cast to struct node 

    printf("%d", head->data); 

} 

Что-то же просто, как struct node *head = {10, head, head} не будет работать, потому что вы не выделили память для структуры (в межд и два указателя).

Решение 2:

#include <stdlib.h> 
#include <stdio.h> 


typedef struct node 
{ 
    int data; 
    struct node * after; 
    struct node * before; 
}node; 
int main() { 

    struct node* head = &(struct node){10,head,head}; 

    printf("%d", head->data); 

} 

Это будет выходить за рамки - Решение 1 превосходит по этой причине и так как вы создаете связанный список, я вам верю потребность кучи выделенной памяти - не выделено стек.

+0

Другими словами, я не могу выделить память в глобальной области видимости? –

0

Вы можете сделать голову указатель, но вам необходимо инициализировать его функции.

struct node head_node; 
struct node *head = &head_node; 

void 
initialize() { 
    *head = {10,&head_node,&head_node}; 
} 

Невозможно инициализировать head ptr непосредственно в глобальном масштабе.

Смежные вопросы