gpt4 book ai didi

c - 代码结果说明

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:21 26 4
gpt4 key购买 nike

你能给我解释一下为什么这段代码中二维数组的第一个元素是1吗?

#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i,j;
int **p = (int **)malloc(2 * sizeof(int *));
p[0] = (int *)malloc(2 * sizeof(int));
p[1] = p[0];
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++){
printf("i=%d & j=%d\t",i,j);
p[i][j] = i + j;
printf("p[%d][%d]=%d\n",i,j,p[i][j]);
printf("this is the result of the first element %d\n",p[0][0]);
}


printf("this is the result %d\n",p[0][0]);
return 0;
}

结果是:

i=0 & j=0 p[0][0]=0

this is the result of the first element 0

i=0 & j=1 p[0][1]=1

this is the result of the first element 0

i=1 & j=0 p[1][0]=1

this is the result of the first element 1

i=1 & j=1 p[1][1]=2

this is the result of the first element 1

this is the result 1

Press to close this window...

最佳答案

因为p[0]p[1]这两行确实是一样的。

p 是两个指针的数组:

int **p = (int **)malloc(2 * sizeof(int *));

第一个指向大小为2的数组:

p[0] = (int *)malloc(2 * sizeof(int));

第二个指向同一个数组:

p[1] = p[0];

因此,对 p[1][0] 的任何修改都会反射(reflect)在 p[0][0] 上,因为两者都指向内存中的相同位置。正如您可以验证的那样,您将 1 分配给了 p[1][0],因此 p[0][0] 变成了 1也是。

关于c - 代码结果说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685252/

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