[英]How to access the elements of a 2D array represented by a Double pointer as a 1D array in C
[英]how to access array elements using double pointer in c
它在屏幕上顯示最后2個數字和其他2個奇數。 如何打印所有元素? 我試圖將雙指針** fool的開頭保留在另一個指針** st中。 但似乎不起作用。
#include<stdio.h>
#include<stdlib.h>
typedef struct a {
int x;
}A_t;
typedef struct b {
A_t **y;
}B_t;
int main() {
int i, j;
A_t **fool, **st;
fool = (A_t**)malloc(2 * sizeof(A_t*));
st = fool;
for(i = 0; i < 2; i++) {
fool[i] = (A_t*)malloc(2 * sizeof(A_t));
for(j = 0; j < 2; j++) {
printf("NR: ");
scanf("%d", &(*fool)[j].x);
}
}
fool = st;
for(i = 0; i < 2; i++) {
for(j = 0; j < 2; j++) {
printf("%d ", (*fool + i)[j].x);
}
}
return 0;
}
它應該是&fool[i][j].x
在scanf
和fool[i][j].x
在printf
。
這是因為您沒有讀到fool
的第二個“行”。 scanf("%d", &(*fool)[j].x);
解引用fool
,您可以將其建模為fool[0]
,然后訪問第j個元素(因此fool[0][j]
。當然,由於您從不更改第一個索引,因此讀取的最后兩個值將占據fool[0][0]
和fool[0][1]
,您將獲得其他兩個的隨機值,這僅僅是因為讀取未初始化的變量是未定義的操作。實際上,您傾向於獲得位於該區域的任何內容。在應用程序之前存儲。
相反,您可以使用在printf
使用的語法(例如scanf("%d", &(*fool+i)[j].x)
),也可以使用KerrekSB剛剛在上面鍵入此內容時發布的語法。 ,請改用標准數組訪問操作。
對此, fool[i][j]
等效於(*fool+i)[j]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.