gpt4 book ai didi

c - 访问结构体中数组中的结构体

转载 作者:行者123 更新时间:2023-11-30 14:50:38 28 4
gpt4 key购买 nike

访问(使用指针)结构体中的数组中的结构体中的变量的正确方法是什么?

我想使用来自function()的指针访问position2D中的变量x和y?请注意,我正在遍历 function() 中的节点(和点),并希望编写如下内容:

draw_point(p->顶点[i]->x, p->顶点[i]->y);

但这似乎不起作用。

typedef struct Position2D{
uint8_t x;
uint8_t y;
} position2D;

typedef struct Node{
int num;
position2D vertices[4];
struct Node *next;
} node;

/* initialisation: */

node *next1 = NULL; //should be empty
node node1 = {1, {{0,0}, {5,0}, {5,5}, {0,5}}, &next1};
node *next0 = &node1;
node node0 = {0, {{0,10}, {10,10}, {10,15}, {0,15}}, &next0};
node *start = &node0;

/*traverse all nodes and their inner vertices arrays: */
void function(void){
node *p;
for(p = start; p != NULL; p = p->next){
int i;
for (i=0; i<4; i++){ //traverse their four points
//How to get to the x and y at this line?
}
}

最佳答案

vertices 是一个普通的结构变量,不是结构指针类型。访问 xy 时使用点 . 运算符而不是 -> 运算符

替换下面的语句

draw_point(p->vertices[i]->x, p->vertices[i]->y);

 draw_point(p->vertices[i].x, p->vertices[i].y);

编辑:分配 next 字段时代码中的另一个问题。

node node1 = {1, {{0,0}, {5,0}, {5,5}, {0,5}}, &next1};

应该是

node node1 = {1, {{0,0}, {5,0}, {5,5}, {0,5}}, (struct Node*)next1};

这是工作代码

#include<stdio.h>
typedef struct Position2D{
int x;
int y;
} position2D;

typedef struct Node{
int num;
position2D vertices[4];
struct Node *next;
} node;
/*traverse all nodes and their inner vertices arrays: */
void function(void){
/* initialisation: */
node *next1 = NULL;
node node1 = {1, {{0,0}, {5,0}, {5,5}, {0,5}}, (struct Node*)next1};
node *next0 = &node1;
node node0 = {0, {{0,10}, {10,10}, {10,15}, {0,15}}, (struct Node*)next0};
node *start = &node0;
node *p = NULL ;
int i=0;
for(p=start;p!=NULL;p=p->next) {
for (i=0; i<4; i++){ //traverse their four points
printf("%d %d \n",p->vertices[i].x, p->vertices[i].y);
}
}

}
int main() {
function();
return 0;
}

关于c - 访问结构体中数组中的结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com