黑马程序员技术交流社区
标题:
二维数组列地址和列指针问题*(*(a+i)+j)
[打印本页]
作者:
atlas
时间:
2014-10-15 16:53
标题:
二维数组列地址和列指针问题*(*(a+i)+j)
例:int a[2][3] = {{1,3,5},{2,4,6}}
怎么理解 *(a+i)+j?
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p,i,j;
p = a;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",*(*(a+i)+j));
}
}
}
复制代码
你又知道这个结果为什么吗?
作者:
弹琴骚年
时间:
2014-10-15 23:14
a[3][3]={1,2,3,4,5,6,7,8,9} 这个数组你可以这样看a[3][3]={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
这个二维数组可以拆分为四个一维数组a[3] = {b1, b2, b3}; 和b1[3] = {1, 2, 3}; b2][3] = {4, 5, 6}; b3[3] = {7, 8, 9};
*(*(a+i)+j) :
*(a+i)就相当于在一维数组a中找第i个数组元素; *(a+0) == b1 , *(a+1) == b2, *(a+2) == b3
*(*(a+0)+j) == *(b1+j) , *(*(a+1)+j) == *(b2+j), *(*(a+2)+j) == *(b3+j)
*(b1+j) 又相当于在b1这个一维数组中找出下标为j的数组元素*(b1+0) == 1 , *(b1+1) == 2, *(b1+2) == 3
其他两个*(b2+j) , *(b3+j)类推。
所以*(*(a+i)+j) 就可以找出二维数组下标分别为i和j的数组元素了。
你上边代码应该是遍历二维数组,按顺序输出二维数组的每个元素吧。
你的这个方法挺好的,用指针来输出二维数组的元素,一般人都直接用数组a[i][j]的形式。。:P:P
作者:
LeeWong
时间:
2014-10-15 23:14
a[i][j]是一个二维数组 i,j分别看做行和列*(a+i)表示第i行的首地址 *(a+i)+j表示第i行第j列的地址
*(*(a+i)+j)就是表示第i行第j列的数
你参考一下吧 希望能帮到你
作者:
atlas
时间:
2014-10-16 08:40
thank you for everyone!
作者:
x65396731
时间:
2014-10-16 08:52
int a[3][3]={1,2,3,4,5,6,7,8,9};
感觉二维数组这样写是不对的。
作者:
兵临城下
时间:
2014-10-16 09:09
二楼正解。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2