我可以在您的代码中注意到两个问题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);