[问题] 二维阵列与双重指标关系

楼主: ipod7788 (小小凉)   2014-11-19 15:18:08
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
codeblock GCC 4.8.1
最近在学C++ 遇到双重指标与多维阵列问题
有看到一个网页上
int x[1][20];
int (*p)[20] = x;
比较常用以下写法
int **p=(int**)x;
接着我想测试那个常用写法是否可以就自己写了一个小程式
int a1[3][2] ;
int** a2 = (int**)a1 ;
int count=0;
for (int i = 0; i < 3; ++i){
for (int j = 0; j < 2; ++j){
a1[i][j] = ++count;
std::cout << "a1["<<i<<"]["<<j<<"] :" << a1[i][j] <<"\t";
std::cout << "a2["<<i<<"]["<<j<<"] :" << *((*a2+i)+j) <<"\t";
}
printf("\n");
}
我想说 如果 a1给值的话 照理说 a2也应该有设定到值
compiler没有问题 但是 执行之后 dos画面 会写 没有回应 就停止程式
不知道是什么原因? 我有上网查过 用双重指标表示二维阵列的其他写法
还是想问一下 这样写为什么有错误? 感谢!
作者: nctucch17170 (kkadam)   2014-11-19 15:29:00
*(a2+i)? (*a2+i)?
作者: purpose (秀才遇到肥宅兵)   2014-11-19 17:09:00
a2 这种写法,你要在执行时期配置内存,也就是要作 new程式当掉,应该会有错误讯息,那很重要如果你要把 a2 指向 a1 的话,应该用 int (a2)[2] = a1;少打 int (*a2)[2] = a1;
作者: dirkc (3781615)   2014-11-19 17:13:00
原po写法等于*(*a2+i+j) , 一楼已提示囉
作者: ichleibeqbi (positive)   2014-11-19 17:18:00
*(a2 + i * 2 + j)
作者: s25g5d4 (function(){})()   2014-11-19 18:05:00
哪个网页教你可以用双重指标接二维阵列的阿
作者: dirkc (3781615)   2014-11-19 18:22:00
疏忽了orz purpose与s25g5d4说的对
作者: s25g5d4 (function(){})()   2014-11-19 18:27:00
我什么都没说阿?首先你要知道 a1 会指向 a[0][0] 这样你就知道为什么不能用双重指标接二维阵列了
作者: dirkc (3781615)   2014-11-19 20:51:00
我猜你意思是不能用,所以说你说的对 XD
作者: purpose (秀才遇到肥宅兵)   2014-11-19 23:07:00
http://goo.gl/OeDeTY 你说的那个网页,后来有人留言了
作者: ichleibeqbi (positive)   2014-11-20 09:56:00
更正一下 *((int*)a2 + i * 2 + j)参考: http://ppt.cc/cAOc
作者: dirkc (3781615)   2014-11-20 12:04:00
代表在C/C++主题上这个板比该网站稍稍略胜一筹
楼主: ipod7788 (小小凉)   2014-11-21 09:28:00
两边都看 不一样就可以跟板友讨论一下XD

Links booklink

Contact Us: admin [ a t ] ucptt.com