簡體   English   中英

如何在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].xscanffool[i][j].xprintf

這是因為您沒有讀到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM