多维数组
发表时间:2006-07-11 00:46:42 关键词:C++,MFC,VC,Primer,编程,教程,读书
(点击:) 把这篇文章告诉我的QQ或MSN朋友
引用:严格地说,C++中没有多维数组。
笔记:不只是C++啦,C中就是这样。不过,正因为C++中没有多维数组,而提供了“数组的数组”,所以C/C++在数组使用上更灵活。
多维数组的定义和使用没什么要多提的,用过就懂了。无非是多一对括号而已。不过,如果把它跟指针一起用,倒是要注意的:二维数组名对应的是“指向指针的指针”,所以,如果要在函数间传递多维数组,指针类型一定要正确:
int a[3][4];
int *p1 = &a[0][0];//a[][]是一个int,对其取地址就是int*
int *p2 = a[0];//a[0]虽然是a有一个元素,但它也是另一个数组的数组名
int **p3 = a;//a是一个二维数组的数组名
int **p4 = &a[0];//a[0]是一个数组名,它是a数组的一个成员
另外,有一个比较难记、容易混淆的用法:
int (*p5)[4] = a;
说它容易混淆,是因为它与“int *p5[4];”有着截然不同的意义。前者是指定义一个指向数组的指针,后者则是定义一个指针数组。——头昏ing...
本人在实际使用中,经常避开多维数组,而用其它途径来使用一大堆数值。比如可以这样用:
int a, b;//两维的元素个数
int *p = new int[a*b];
for (int i=0; i<a; ++i)
for (int j=0; j<b; ++j)
p[i*a+j].....;
delete []p;
用这种方法,就是三维、四维也不用考虑“指向指针的指针”这么复杂的东西。不是我不会,而是不高兴去想。
本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
