为什么代码使用2个指针变量

时间:2014-10-03 04:00:56

标签: c arrays pointers

#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;            
}

在这段代码中,程序员使用了两个指针变量&#39; p&#39;和品脱&#39;?我不能只使用&#39; p&#39;变量?

3 个答案:

答案 0 :(得分:0)

ppint都将冗余任务作为中间变量。你是正确的,你可以在没有pint的情况下获得相同的结果,但是如果没有ppint,你也可以获得相同的结果。

根据我的经验,for循环最好写成for (i = start; i < end; i++)而不是for (i = start; i <= end - 1; i++)。考虑到这一点,不使用ppint的代码示例可能是:

int main()
{
    int s[4][2]={
                {1234,56},
                {1212,33},
                {1434,80},
                {1312,78},
                };

    int i;
    for (i = 0; i < 4; i++)
    {
        int j;
        for (j = 0; j < 2; j++)
            printf("%d\t", s[i][j]);
        printf("\n");
    }

    return 0;            
}

在表达式中使用时,数组类型通常衰减指向第一个元素的指针类型。理解数组类型和指针类型仍然是不同的是至关重要的。在某些情况下,数组类型不会衰减到指针类型,特别是当它是sizeof&的操作数时。

答案 1 :(得分:0)

如果你想使用指向数组变量的指针来打印数组元素。试试这个......

     #include<stdio.h>
     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]);//(or) printf("%d\t",*(*(p+i)+j));
           printf("\n");
         }
         return 0;            
       }

答案 2 :(得分:0)

是的,只有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)打印值。