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));