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;
}

 

如果可以反匯編,就可以知道 究竟為什么錯了。。。懶得搞 不熟悉的東西了。。。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM