它把最后两个数字和另外两个奇怪的数字放在屏幕上。
如何打印所有元素?
我试着把双指针的开头放在另一个指针上,但似乎不起作用。

#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的第二行。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]

关于c - 如何在C中使用双指针访问数组元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14905726/

10-11 18:41