使用指针定义结构

时间:2014-03-16 20:43:47

标签: c

我对C相对较新,并试图了解structspointers。这个结构声明末尾的*Building有什么作用?

typedef struct building {
        char *floor;
        struct building *nextBuilding;
} *Building;

这是否意味着从现在开始我

Building someBuilding = malloc(sizeof(struct building));

somebuilding是指向building

的指针

2 个答案:

答案 0 :(得分:2)

回答这个问题:是的。您现在有一个类型Building,它是指向struct building的指针,您可以执行此操作:

Building someBuilding = malloc(sizeof(struct building));
someBuilding->floor = malloc (sizeof(char)*20);
strcpy(someBuilding->floor, "First floor");
someBuilding->nextBuilding = NULL;

请注意,在所有情况下这可能都不是一个好主意。例如,如果您声明一个方法:

void setFloorName(Building building, char* name)

你无法确定你需要将指针传递给构建结构,但是如果你这样做:

void setFloorName(Building* building, char* name)

你会立即看到该函数带有一个指针。

答案 1 :(得分:2)

是的,当你写:

 typedef struct building { … } *Building;

 Building bp;

然后bp是指向struct building的指针。但是,将指针包含在typedef中通常被认为是不好的风格;如果您使用以下代码,则更容易理解:

 typedef struct building { … } Building;

 Building *bp;

现在很清楚bp的定义是类型是指针。如果你永远不会访问结构的内部,那么它并不重要(但请查看FILE *中的<stdio.h>;你总是写FILE *fp等)。如果您要访问内部:

printf("Floor: %s\n", bp->floor);

然后最好让指针可见。看到Building bp;然后bp->floor代替bp.floor,人们会感到有些意外。