gpt4 book ai didi

c - 访问结构中的指针

转载 作者:行者123 更新时间:2023-12-03 19:44:39 24 4
gpt4 key购买 nike

目前我有以下代码:

typedef struct _hexagon {
int *vertice[6];
int *path[6];
int resourceType;
} hexagon;


typedef struct _game {
hexagon hexagons[5][5];
} Game;

主要是我有:

Game g;
// This is the line that fails
g.hexagons[0][0].vertice[0] = 0;

这可以正常编译,但会出现段错误。我尝试了很多变体,例如

g.hexagons[0][0].*vertice[0] = 0;

无法编译。如何从结构中访问指针的内存?

最佳答案

因为vertices是一个array-of-pointes-to-integers,要访问vertice[0],你需要做*g.hexagons[0][0].顶点[0]

示例程序:

#include <stdio.h>

typedef struct _hexagon {
int *vertice[6];
int *path[6];
int resourceType;
} hexagon;


typedef struct _game {
hexagon hexagons[5][5];
} Game;

int main()
{
int i1 = 1;
int i2 = 2;
int i3 = 3;
int i4 = 4;
int i5 = 5;
int i6 = 6;

Game g;
g.hexagons[0][0].vertice[0] = &i1;
g.hexagons[0][0].vertice[1] = &i2;
g.hexagons[0][0].vertice[2] = &i3;
g.hexagons[0][0].vertice[3] = &i4;
g.hexagons[0][0].vertice[4] = &i5;
g.hexagons[0][0].vertice[5] = &i6;

printf("%d \n", *g.hexagons[0][0].vertice[0]);
printf("%d \n", *g.hexagons[0][0].vertice[1]);
printf("%d \n", *g.hexagons[0][0].vertice[2]);
printf("%d \n", *g.hexagons[0][0].vertice[3]);
printf("%d \n", *g.hexagons[0][0].vertice[4]);
printf("%d \n", *g.hexagons[0][0].vertice[5]);

return 0;
}

输出:

$ gcc -Wall -ggdb test.c 
$ ./a.out
1
2
3
4
5
6
$

希望对您有所帮助!


更新:正如 Luchian Grigore 所指出的

segmentation fault的原因由下面的小程序解释。简而言之,您正在取消引用 NULL 指针。

#include <stdio.h>

/*
int *ip[3];
+----+----+----+
| | | |
+----+----+----+
| | |
| | +----- points to an int *
| +---------- points to an int *
+--------------- points to an int *

ip[0] = 0;
ip[1] = 0;
ip[2] = 0;

+----+----+----+
| | | |
+----+----+----+
| | |
| | +----- NULL
| +---------- NULL
+--------------- NULL

*ip[0] -> dereferencing a NULL pointer ---> segmantation fault
*/

int main()
{
int * ip[3];
ip[0] = 0;
ip[1] = 0;
ip[2] = 0;

if (ip[0] == NULL) {
printf("ip[0] is NULL \n");
}

printf("%d \n", *ip[0]);
return 0;
}

现在您可以将 int *ip[] 与您的 g.hexagons[0][0].vertice[0]

关联起来

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

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