C其实没有多维数组,是一个线性空间。数组的访问会通过计算指针计算来定位元素。
声明a[i][j],其实是声明了一个常指针, int ** const a
*a 代表 int* 类型的变量
a[i][j]的访问是
*(*a + (i*列数) + j)
那么数组a[2][3]的最后一个元素是a[1][2] = *(*a + 1*3 + 2) = *(*a + 5)
所以超出范围的位置是*a + 6
注:当你声明了一个int*型指针p来遍历数组,那么要保证赋值时类型一致, int * p = *a
综上,楼主贴的代码风格,相当的不好,不鼓励在实际开发中使用!
虽然指针访问效率比用数组形式快,但这样的场景下,使用数组比较好。
建议:
1、发正确的代码
2、发格式好的代码,这里介绍一个网站,可以让你的代码着色,并排版。http://
[
本帖最后由 synelang 于 2010-8-29 21:55 编辑 ]