gpt4 book ai didi

c - 如何在c中使用双指针访问数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:10 24 4
gpt4 key购买 nike

它将最后 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 的第二“行”。 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com