码迷,mamicode.com
首页 > 编程语言 > 详细

C++逆天语法系列之二维数组

时间:2014-10-15 21:54:01      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:二维数组   64位   c++   c   

某公司的笔试题,自己分析得出的答案,并在后面对二维数组元素表示形式做出总结。新手朋友别嫌啰嗦,耐心看完并记住对你会有帮助的。老鸟们也欢迎来提意见。


	int a[4][4] = {
		{1,2,3,4},
		{50,60,70,80},
		{900,1000,1100,1200},
		{13000,14000,15000,16000}
	};
	int (*p1)[4] = a;
	int (*p2)[4] = &a[0];
	int *p3 = &a[0][0];

	printf("%d, %d, %d, %d\n",
		*(*(a+1)-1),
		*(*(p1+3)-2)+1,
		*(*(p2-1)+16)+2,
		*(p3+sizeof(p1)-3)
		);

64位环境,问上述代码的运行结果。


好吧来分析,首先二维数组名指向的是二维数组的首行地址,

int(*p1)[4]=a,是一个指向四个整型数组的指针;

int *p3=&a[0][0],将二维数组按一维数组的方式引用;

第一个输出:a+1即第二行的地址,*(a+1)即第二行的第一个元素的地址,再减一是它前面的元素地址,即第一行第四个元素,结果为4.

第二个输出:p1和p2和a是一样的,p1+3即第四行的地址,*(p1+3)即第四行第一个元素的地址,再减二则是第三行第三个元素的地址,结果为1101。

第三个输出:p2-1为第四行地址,*(p2-1)表示第四行第一个元素地址,加上16即绕一圈还是这个元素,结果为13002。

第四个输出:64位环境,则sizeof(p1)是8,p3+5表示一维数组第五个元素,即二维数组第二行第二个元素,结果为60。


嗯来做个总结吧:

二维数组元素a[i][j]有下面几种引用形式:

*(a[i]+j) //a[i]为数组第i行地址,再加j即为数组第i行j列地址

*(*(a+i)+j) //a+i为数组第i行地址,*(a+i)为数组第i行0列地址,再加j即为第i行j列地址


C++逆天语法系列之二维数组

标签:二维数组   64位   c++   c   

原文地址:http://blog.csdn.net/u011421608/article/details/40113131

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!