gpt4 book ai didi

c - 指向二维结构数组 C 的指针

转载 作者:太空狗 更新时间:2023-10-29 15:33:10 24 4
gpt4 key购买 nike

我有一个特定的结构 structX 和一个包含这些结构的二维数组。

我希望能够保存指向该 2D 结构的指针并对其进行迭代

以动态方式,也就是说,指针可以容纳任何 structX 并进行迭代。

一般行示例:

struct structX *ptr = NULL;

...

if(i == OK)
{
ptr = General_struct_which_holds_others->ptr1;
}
else if(i ==NOT_OK)
{
ptr = General_struct_which_holds_others->ptr2;
}

现在迭代:

if(ptr[x][y] == OK) <----Error, subscripted value is neither array nor pointer
{
...
}

我希望我能被理解,正如我所说的,这是非常笼统的。

如何进行迭代?意思是不会出错?

谢谢!

最佳答案

我在你的代码中注意到了两个问题 if(ptr[x][y] == OK)

(1):

ptr 是指向结构的指针(单个 *)你不能使用双索引 [][] 所以在 if(ptr[x][ y] == OK)

错误,下标值既不是数组也不是指针,因为 ptr[][]

(2):

错误:在需要标量的地方使用了结构类型值意味着 if(struct are not allow)

if(should be a scalar value )

标量值表示可以转换为0/1.

指向二维结构数组C的指针

struct structX matrix2D[ROW][COL];

它的指针

struct structX (*ptr2D)[ROW][COL];

ptr2D = &matrix2D;

好的,像这样访问你的数组结构:

struct structX i;
(*ptr2D)[r][c] = i;

如果你想传入一个函数,可以这样做:

void to(struct structX* ptr2D[][COL]){
struct structX i;
ptr2D[][COL] = i;
}
void from(){
struct structX matrix2D[ROW][COL];
to(matrix2D);
}

只是为了让您确定我写了一个简单的代码来展示如何使用ptr2D。希望对您有所帮助:

#include<stdio.h>
#define ROW 10
#define COL 5
typedef struct {
int a;
char b;
} structX;
void to(structX ptr2D[][COL], int r, int c){
printf("in to: %d %c\n", ptr2D[r][c].a, ptr2D[r][c].b);
}
int main(){
structX matrix[ROW][COL];
structX (*ptr2D)[ROW][COL];
ptr2D = &matrix;
structX i;
i.a = 5;
i.b = 'a';
int r = 3;
int c = 2;
(*ptr2D)[r][c] = i;
printf("%d %c\n", (*ptr2D)[r][c].a, (*ptr2D)[r][c].b);
to(matrix, r, c);
}

它的工作,输出:

5 a
in to: 5 a

编辑

我想展示两个技巧,但现在我认为我应该提供一个统一的方法(正如您评论的那样):所以这是代码:

#include<stdio.h>
#define ROW 10
#define COL 5
typedef struct {
int a;
char b;
} structX;
void to(structX (*ptr2D)[ROW][COL], int r, int c){
printf("in to: %d %c\n", (*ptr2D)[r][c].a, (*ptr2D)[r][c].b);
}
int main(){
structX matrix[ROW][COL];
structX (*ptr2D)[ROW][COL];
ptr2D = &matrix;
structX i;
i.a = 5;
i.b = 'a';
int r = 3;
int c = 2;
(*ptr2D)[r][c] = i;
printf("%d %c\n", (*ptr2D)[r][c].a, (*ptr2D)[r][c].b);
to(&matrix, r, c);
}

输出

5 a
in to: 5 a

编辑:

错误:在需要标量的地方使用了结构类型值意味着 if(struct are not allow)

if(should be a scalar value )

你不能像 if((*ptr2D)[r][c]); 那样做

但这是允许的:

if((*ptr2D)[r][c].a == 5); 

if((*ptr2D)[r][c].b == 'a');  

if((*ptr2D)[r][c].a == 5 && (*ptr2D)[r][c].b == 'a');  

structX  i;
if((*ptr2D)[r][c] == i);

关于c - 指向二维结构数组 C 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15207888/

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