Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用指针定义结构_C - Fatal编程技术网

C 用指针定义结构

C 用指针定义结构,c,C,我对C比较陌生,并且试图理解结构和指针。此结构声明末尾的*建筑是做什么的 typedef struct building { char *floor; struct building *nextBuilding; } *Building; 这是否意味着从现在起当我 Building someBuilding = malloc(sizeof(struct building)); somebuilding是指向建筑物的指针?回答问题:是。现在,您有了一个类型建筑,

我对C比较陌生,并且试图理解结构和指针。此结构声明末尾的*建筑是做什么的

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,所以需要进行交互。感谢教授们并没有垄断好的风格。这是一个人们不同意的领域,但我想你会发现相当多的人同意我的观点。比如说,,