双指针和单指针之间共享的相同变量

时间:2015-09-09 12:52:51

标签: c arrays pointers double-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循环内的指针?为什么我不必创建两个单独的变量?

2 个答案:

答案 0 :(得分:2)

for循环内部,使用arr作为指向内部的指针;您使用*(arr+i)作为指向一个int的指针,这与解除引用arr一致,这是一个指向指针的指针 - 到一个-INT

答案 1 :(得分:1)

你不是&#34;重用&#34; arr既是指向指针又是指针的指针。 arr的类型为int **,但您可以使用*(arr + i)进行指针算术并取消引用指针,该表达式的类型为int *

另外,正如Joachim在评论中所提到的,*(arr + i)相当于arr[i]。使用这种表示法可以更清楚地了解您正在做什么。