[英]Pointer to 2D struct array C
我有一個struct structX
和一個包含這些結構的2D數組。
我希望能夠保存指向該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):
error:使用了struct type value,其中標量是必需的, 表示 if(struct are not allow)
。
if(should be a scalar value )
標量值表示可以轉換為0/1.
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
編輯 :
error:使用了struct type value,其中標量是必需的, 表示 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.