程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 強制轉換-請問一個關於指針操作數據的問題!

強制轉換-請問一個關於指針操作數據的問題!

編輯:編程綜合問答
請問一個關於指針操作數據的問題!

嵌入式程序,編譯器IAR,CPU 瑞薩
unsigned char a[]={0x01,0x02,0x03,0x04,0x05,0x06};
int test(void)
{
unsigned short *p=(unsigned short *)(&a[1]);
unsigned short temp=p[0];//此時編譯器Watch 裡面 p[0]=0x0302 temp=0x0201
if(0x0302==p[0])//走else
{
//do something
}
else
{
//do something
}
if(temp==p[0])//走if
{
//do something
}

}
求指教!!用大小端測試程序 結果為小端模式
請問p[0]的值應該為多少,為什麼watch裡面的值和程序實際使用的值不一樣

最佳回答:


確實是小端模式,大端模式一般用在網絡傳輸中。你在程序中處理變量等,一般都是小端模式。
0x01, 0x02 這兩個char在數組中的位置前面在低字節、後面在高字節,你懂的,指向第一個指針加1才能訪問第二個
小段模式的特點就是低字節放在低位,那麼兩個char組成的short就應該是
0x0201了(0x01在低字節,所以放在了低位)
照此說來,watch中是對的,p[1]=0x0403

但是走了else分支,確實挺奇怪的,是不是哪裡搞錯了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved