指向指针的指针,我输了

Bin*_* Du 4 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++) 
    {
            for(j = 0; j < 2; j++) 
            {
                p[i][j] = i + j; 
            }
    } 

    printf("p[0][0] = %d",p[0][0]); 

    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

当这个程序运行时,我得到:P [0] [0] = 1.为什么P [0] [0] = 0?

Pra*_*han 7

您正在制作p[0]p[1]指向相同的内存位置.稍后,您运行此循环:

for(i = 0; i < 2; i++) 
            for(j = 0; j < 2; j++) 
                    p[i][j] = i + j;
Run Code Online (Sandbox Code Playgroud)

设置p[0][0]0.但是,接下来是设置p[1][0]1.既然p[0]p[1]平等,最终终于p[0][0]结束了1.

你可能想要的而不是

p[0] = malloc(2 * sizeof(int)); 
p[1] = p[0];
Run Code Online (Sandbox Code Playgroud)

也是一个单独mallocp[1].像这样:

p[0] = malloc(2 * sizeof(int)); 
p[1] = malloc(2 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)