双指针和单指针共享同一个变量

The same variable shared between double pointer and single pointer

晚上好, 关于以下代码的快速问题:

// Start of main
int i,j;
int row,col;

printf("Enter the values for row and col:\n");
scanf("%d%d",&row,&col);
int **arr=(int**)malloc(row*(sizeof(int*)));

for(i=0; i<row; i++)
{
 *(arr+i) = (int*)malloc(sizeof(int)*col);
}

// .. code after this snippet

为什么我可以将变量 arr 用作指向指针的指针,然后将其重新用作 for 循环内的指针?为什么我不必创建两个单独的变量?

for 循环中,您 不是 使用 arr 作为 指针指向整数 ;您正在使用 *(arr+i) 作为 指向整数的指针 ,这与取消引用 arr 一致,后者是 指向的指针-a-pointer-to-an-int.

你不是"reusing" arr既是指针又是指针。 arr 的类型为 int **,但随后您执行一些指针运算并使用 *(arr + i) 取消引用指针,并且该表达式的类型为 int *.

此外,正如 Joachim 在评论中提到的,*(arr + i) 等同于 arr[i]。使用此表示法可以更清楚地说明您在做什么。