这是我的代码,它编译并运行:
#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?
您正在制作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)
也是一个单独malloc的p[1].像这样:
p[0] = malloc(2 * sizeof(int));
p[1] = malloc(2 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |