4

長い値の例を追加する際に問題に直面しています

 typedef unsigned short  UINT16;

   UINT16* flash_dest_ptr;  // this is equal to in hexa 0XFF910000

   UINT16 data_length ; // hex =  0x000002AA &  dec = 682

  //now when I add  

  UINT16 *memory_loc_ver = flash_dest_ptr + data_length ;

  dbug_printf( DBUG_ERROR | DBUG_NAVD, " ADD hex =0x%08X\n\r",memory_loc_ver   );

実際の O/p = 0xFF910554

// shouldn't o/p be FF9102AA ?
4

2 に答える 2

5

ポインタ演算なので

UINT16 *memory_loc_ver = flash_dest_ptr + data_length ;

バイト単位でflash_dest_ptr進みます。data_length * sizeof (UINT16)

通常はsizeof (UINT16)2 で、

2 * 0x2AA = 0x554
于 2013-05-10T19:02:56.617 に答える
0

data_length UINT16ポインター値に整数を追加すると、実際には、バイトではなく、メモリ内で sを移動するのに必要なバイト数だけポインターが移動しdata_lengthます。

于 2013-05-10T19:02:43.727 に答える