C++二维数组 取地址 复制给 二维指针
本来应该是个简单的问题,但是我就不明白了,为什么会段错误了。。。
#include<stdio.h> #define UINT32 unsigned int UINT32 NType1_XY[11][2]={ {2300,500 },{900 ,1600},{2300,1600},{3700,1600}, {600 ,3500},{2300,4000},{2300,3000},{4000,3500}, {900 ,5400},{2300,6000},{3700,5400} }; int main(){ UINT32 **ntype_xy; ntype_xy=NType1_XY; printf("x=%d,y=%d\n",ntype_xy[0][0],ntype_xy[0][1]); printf("x=%d,y=%d\n",NType1_XY[0][0],NType1_XY[0][1]); return 0; }
提示
aaaa.cpp: In function 'int main()':
aaaa.cpp:11:9: error: cannot convert 'unsigned int [11][2]' to 'unsigned int**'
in assignment
ntype_xy=NType1_XY;
那我强制转换吧:
ntype_xy=(UINT32**)NType1_XY;
可以编译了但是在打印的时候 却段错误,程序崩溃了。
最后查了下资料 以及 尝试尝试 ,终于 知道了 怎么才能不强制转换 不报错,打印出来了:
#include<stdio.h> #define UINT32 unsigned int UINT32 NType1_XY[11][2]={ {2300,500 },{900 ,1600},{2300,1600},{3700,1600}, {600 ,3500},{2300,4000},{2300,3000},{4000,3500}, {900 ,5400},{2300,6000},{3700,5400} }; int main(){ int xx=3; int *pxx; pxx=&xx; UINT32 (*ntype_xy)[2]; ntype_xy=&NType1_XY[0]; printf("x=%d,y=%d\n",ntype_xy[0][0],ntype_xy[0][1]); printf("x=%d,y=%d\n",NType1_XY[0][0],NType1_XY[0][1]); return 0; }
如果可以反汇编,就可以知道 究竟为什么错了。。。懒得搞 不熟悉的东西了。。。
------------------------------------------------------------------------------------------------
一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。