【发布时间】:2019-12-17 05:16:04
【问题描述】:
我不太明白将一个指针分配给另一个指针是什么意思?这里**p是一个指针数组/二维数组,然后p[0]被分配给p[1],它们都指向同一个地址吗?
#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;
}
我希望输出为 0,但实际上是 1,为什么?
【问题讨论】:
-
p是一个指针数组。因此,您将指针从 p[0] 分配给 p[1]。因此,它们都指向 相同的 区域,该区域的大小为 2 个整数。对我来说看起来一团糟。 -
p 不是数组(或者你说的**p),指针和数组有很大的不同
标签: c loops for-loop pointers assignment-operator