晚上好, 关于以下代码的快速提问:
// 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循环内的指针?为什么我不必创建两个单独的变量?
答案 0 :(得分:2)
在for
循环内部,不使用arr
作为指向内部的指针;您使用*(arr+i)
作为指向一个int的指针,这与解除引用arr
一致,这是一个指向指针的指针 - 到一个-INT 强>
答案 1 :(得分:1)
你不是&#34;重用&#34; arr
既是指向指针又是指针的指针。 arr
的类型为int **
,但您可以使用*(arr + i)
进行指针算术并取消引用指针,该表达式的类型为int *
。
另外,正如Joachim在评论中所提到的,*(arr + i)
相当于arr[i]
。使用这种表示法可以更清楚地了解您正在做什么。