C 指针指向指针,我迷路了
这是我的代码,它编译并运行:C 指针指向指针,我迷路了,c,C,这是我的代码,它编译并运行: #include <stdio.h> #include <stdlib.h> int main() { 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++) {
#include <stdio.h>
#include <stdlib.h>
int main()
{
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("p[0][0] = %d",p[0][0]);
return 0;
}
#包括
#包括
int main()
{
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(“p[0][0]=%d”,p[0][0]);
返回0;
}
当这个程序运行时,我得到:p[0][0]=1。为什么P[0][0]=0?
您正在制作的
P[0]
和P[1]
指向相同的内存位置。稍后,您将运行以下循环:
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
p[i][j] = i + j;
对于p[1]
也是一个单独的malloc
。像这样:
p[0] = malloc(2 * sizeof(int));
p[1] = malloc(2 * sizeof(int));
p[1]和p[0]被分配到相同的内存位置。因此,p[1]中的任何更改都会更改p[0]。您应该为p[1]分配单独的空间
p[1]=malloc(2 * sizeof(int));
这里的问题是
p[1]=p[0]代码>@rel为什么?请解释根据您的解释,我们需要为p[1]分配不同的内存?p[1]=(int*)malloc(2*sizeof(int))@是的,否则它们只是指针,会指向相同的内存块。哦,对不起。我的一个老习惯。非常感谢。
p[1]=malloc(2 * sizeof(int));