我对C相对较新,并试图了解structs
和pointers
。这个结构声明末尾的*Building
有什么作用?
typedef struct building {
char *floor;
struct building *nextBuilding;
} *Building;
这是否意味着从现在开始我
Building someBuilding = malloc(sizeof(struct building));
somebuilding是指向building
?
答案 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
,人们会感到有些意外。