#include<stdio.h>
int main()
{
int s[4][2]={
            {1234,56},
            {1212,33},
            {1434,80},
            {1312,78},
            };
int (*p)[2];
int i,j,*pint;
for(i=0;i<=3;i++)
{
    p=&s[i];
    pint=(int *)p;
    printf("\n");
    for(j=0;j<=1;j++)
    printf("%d\t",*(pint+j));
}
return 0;
}


在此代码段中,程序员使用了两个指针变量“ p”和“ pint”?我不能仅使用'p'变量获得结果吗?

最佳答案

是的,只有p可以在此处结帐:(注意:这取决于他们可能试图理解指针概念的目的)

int main()
{
 int s[4][2]={
            {1234,56},
            {1212,33},
            {1434,80},
            {1312,78},
            };
int (*p)[2];
int i,j;
p=s;
 for(i=0;i<=3;i++)
 {
  for(j=0;j<=1;j++)
    printf("%d\t",p[i][j]);
    printf("\n");
 }
return 0;
}


在您的代码中,他们试图解释如何创建2D pointer以及该2D pointer如何指向row中的2D array;这里p=&s[i]; p指向2D数组s的第一行。现在pint=(int *)p;,这里的int指针pint指向2D数组s的第一行。最后使用指针pint作为*(pint+j)打印值。

08-18 13:18