指针数组的问题
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]
对于这个问题 谭浩强的书上挺详细的 可以看看