2014-10-03 93 views
0
#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'变量来获得结果吗?为什么代码使用了2个指针变量

+2

这里既不需要'p'也不需要'pint' ... – dreamlax 2014-10-03 04:02:52

+0

你可以使用'p'或'pint'或两者都不使用;你的选择。总的来说,这也不是最好的选择。印刷最后可以用换行符来完成。演员是残酷的。它很有效,但这就是你可以说的一切。类型正确的赋值是'pint = * p;'。 – 2014-10-03 04:05:07

+0

这只是一个名为“数组中的指针”的主题中的练习题,所以我必须仅使用指针来完成此操作。 – Neeraj 2014-10-03 04:11:35

回答

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可以分在A row来自2D array;这里p=&s[i];p指向2D阵列第1行s。现在pint=(int *)p;这里是一个int指针pint指向您的二维数组的第一行s。最后使用指针pint作为*(pint+j)来打印值。

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&的操作数时。

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;    
     } 
相关问题