我能';我不理解C语言中的这段代码
我似乎不明白为什么要打印代码1作为答案。 我正在学习C,这是一个家庭作业的问题。 有人能解释一下吗我能';我不理解C语言中的这段代码,c,code-snippets,C,Code Snippets,我似乎不明白为什么要打印代码1作为答案。 我正在学习C,这是一个家庭作业的问题。 有人能解释一下吗 #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
#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++)
p[i][j] = i + j;
printf("%d",p[0][0]);
return 0;
}
#包括
#包括
内部主(空){
int i,j;
int**p=(int**)malloc(2*sizeof(int*);
p[0]=(int*)malloc(2*sizeof(int));
p[1]=p[0];
对于(i=0;i<2;i++)
对于(j=0;j<2;j++)
p[i][j]=i+j;
printf(“%d”,p[0][0]);
返回0;
}
我认为应该打印0,但似乎我错了。
p[0]
和p[1]
都是int*
类型(即指针)。之后
p[1]
和p[0]
都指向同一地址,这使得p[0][0]
与p[1][0]
相同。该值由最后一次更新它的值决定。最后,p[1][0]
更新该值,使最终结果为1
如果您将代码更改为:
for(i = 1; i >= 0; i--)
for(j = 1; j >= 0; j--)
p[i][j] = i + j;
printf("%d",p[1][0]);
猜猜看,它会打印0。希望有帮助。您对指针感到困惑
p[0]
是指向int
的指针,p[1]
也是
代码使p[0]
和p[1]
指向同一地址:
p[1] = p[0];
其效果是,p[i][j]
引用同一对象,无论i
是0还是1。嵌套循环将首先访问p[0][0]
,将其设置为0,然后再访问p[1][0]
(这与访问p[0][0]
的对象相同,从而将其指定为1
这里的关键点是
p[0][0]
和p[1][0]
是相同的。它返回什么?注意p[0][0]
和p[1][0]
是同一个对象,因为p[1]
指向与p[0]
相同的地址。它返回值1。我想到了,但我能理解p[1]指向p[1][0]但是为什么p[0]取p[1]的值,如果代码是p[0]=p[1],那么应该是这样的。我错了吗?我是说打印,很抱歉
p[1] = p[0];