首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针数组的有关问题

2012-02-20 
指针数组的问题main(){inti,j,a[2][10]{{9,4,6,2,7,0,1,5,3,8},{9,4,6,2,7,0,1,5,3,8}}printf( Befores

指针数组的问题
main()
{int   i,j,a[2][10]={{9,4,6,2,7,0,1,5,3,8},{9,4,6,2,7,0,1,5,3,8}};
  printf( "Before   stor:\n ");
  for(i=0;i <2;i++)
      {for(j=0;j <10;j++)
            printf( "%3d ",a[i][j]);
        printf( "\n ");
      }    
  stor(a+1,10);                                               /*   其中a+1代表的是地址还是内容?*/
  printf( "\nAfter   stor:\n ");
  for(i=0;i <2;i++)
      {for(j=0;j <10;j++)
              printf( "%3d ",*(*(a+i)+j));
          printf( "\n ");
      }
}
stor(p,n)
int   *p,n;
{int   i,t,*pj;
  for(i=1;i <10;i++)
        for(pj=p+n-1;pj> p+i-1;pj--)
              if(*(pj-1)> *pj)
                {t=*pj;
                  *pj=*(pj-1);
                  *(pj-1)=t;
                }
}

stor(a+1,10);         其中a+1代表的是地址还是内容?*(a+1)代表的是地址还是内容?这个程序里用这两个运算出来的结果都一样.....

[解决办法]
对于二维数组来说 a[5][5]
a可以代表这个二维数组的首地址,也可以代表二维数组中第一个数组的首地址,也可以代表二维数组中的第一个元素的首地址

所以a + 1就代表a[1]的首地址,
对于*(a + 1),实际上是二维数组的第二行的值,但由于第二行是一个以为数组,所以*(a +1)代表了第二行的首地址,也就是和a[1]的地址

你如果真正想取内容的话 用*(*(a+1)),等价于*(*(a+1) + 0)
相当于是第二行第一个元素的值 即a[1][0]

对于这个问题 谭浩强的书上挺详细的 可以看看

热点排行