陣列定義起始位址的問題

2021-08-19 19:25:37 字數 758 閱讀 1470

加入有如下**行:

uchar rad[6]=;

read_infnflashsegment(flash_infd_baseaddr,dgsensor_radx_offset,rad,6);        //讀出rad的值

gslopebaseangle.rad_x=*((int*)&rad[0]);        //rad_x,rad_y,rad_z是int型別的值

gslopebaseangle.rad_y=*((int*)&rad[2]);

gslopebaseangle.rad_z=*((int*)&rad[4]);

實際上 通過指標轉化後的值gslopebaseangle.rad_x並不等於rad[0]*256+rad[1](假定小端模式),而是會多出來乙個異常的字元。

主要原因是因為

uchar型別的是一位元組對齊的

int型別是2位元組對齊的,如果mcu的系統字是2位元組,則定義int型別可能會總是在偶位址開始

。。。所以若果uchar是定義的起始位址在基位址時,就會出錯,多出來乙個填充位址

解決方法:

#pragma data_alignment=2 

uchar rad[6]=;

#pragma pack ()

加上這句話後,定義rad時則會自動2位元組對齊,起始位址就會在int對齊字上,通過指標訪問就正常了

關於陣列位址問題

c語言中 指標 是算是比較難的乙個問題,而 指標 就是 位址 知道陣列的位址問題,才能在用指標陣列的時候得心應手。下面是一段 include int main int b 2 3 printf p t p n a,a 1 printf p t p n a,a 1 printf p t p n a 0...

C 輸出字串的起始位址

先給出通過字元型指標輸出字串的示例 如下 include usingstd cout usingstd endl intmain include intmain 兄弟,醒醒吧,咱們要寫的是c 不要總是抓著c不放嘛。好了,我們來分析一下,由於c 標準庫中i o類對 操作符過載,因此在遇到字元型指標時會...

const 定義陣列問題

const keysarr array aaa 11111 bbb 22222 ccc 33333 ddd 44444 上面是標準的錯誤格式,php編譯不會報詳細錯誤資訊 500 查詢半天的 問題,一直未發現錯誤,後使用 usr local php bin php xxcontroller.php ...