如何使用{}声明指针结构?

时间:2010-04-27 03:50:08

标签: c declaration structure

这可能是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};

2 个答案:

答案 0 :(得分: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}这样简单的东西不会起作用,因为你没有为结构分配内存(int和两个指针)。

解决方案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因此而优越,因为您正在创建链接列表,我相信您需要堆分配内存 - 而不是堆栈分配。

答案 1 :(得分:0)

你可以让头部成为指针,但你需要在函数中初始化它。

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

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

你无法直接在全局范围内初始化head ptr。