C 用指针定义结构
我对C比较陌生,并且试图理解结构和指针。此结构声明末尾的*建筑是做什么的C 用指针定义结构,c,C,我对C比较陌生,并且试图理解结构和指针。此结构声明末尾的*建筑是做什么的 typedef struct building { char *floor; struct building *nextBuilding; } *Building; 这是否意味着从现在起当我 Building someBuilding = malloc(sizeof(struct building)); somebuilding是指向建筑物的指针?回答问题:是。现在,您有了一个类型建筑,
typedef struct building {
char *floor;
struct building *nextBuilding;
} *Building;
这是否意味着从现在起当我
Building someBuilding = malloc(sizeof(struct building));
somebuilding是指向建筑物的指针?回答问题:是。现在,您有了一个类型建筑,它是指向结构建筑的指针,您可以执行以下操作:
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)
您会立即看到该函数使用指针。回答问题:是。现在,您有了一个类型建筑,它是指向结构建筑的指针,您可以执行以下操作:
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)
您会立即看到该函数带有指针。是,当您写入:
typedef struct building { … } *Building;
Building bp;
然后,bp是指向结构建筑的指针。然而,在typedef中包含指针通常被认为是不好的样式;如果使用以下选项,代码更容易理解:
typedef struct building { … } Building;
Building *bp;
现在,通过查看bp的定义可以清楚地看出,该类型是一个指针。如果您永远不会访问该结构的内部,那么这也没什么大不了的,只需查看中的文件*in;如果要访问内部文件,请始终写入文件*fp等:
printf("Floor: %s\n", bp->floor);
那么最好让指针可见。人们会对英国石油公司的建设略感意外;然后稍后用bp->floor代替bp.floor。是的,当你写:
typedef struct building { … } *Building;
Building bp;
然后,bp是指向结构建筑的指针。然而,在typedef中包含指针通常被认为是不好的样式;如果使用以下选项,代码更容易理解:
typedef struct building { … } Building;
Building *bp;
现在,通过查看bp的定义可以清楚地看出,该类型是一个指针。如果您永远不会访问该结构的内部,那么这也没什么大不了的,只需查看中的文件*in;如果要访问内部文件,请始终写入文件*fp等:
printf("Floor: %s\n", bp->floor);
那么最好让指针可见。人们会对英国石油公司的建设略感意外;后来bp->floor代替了bp.floor。中间层,因为我的cs教授在代码中使用了*Building。感谢教授们并没有垄断好的风格。这是一个人们不同意的领域,但我想你会发现相当多的人同意我的观点。比如说,我的cs教授在他的代码中使用了*Building,所以需要进行交互。感谢教授们并没有垄断好的风格。这是一个人们不同意的领域,但我想你会发现相当多的人同意我的观点。比如说,,