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_ptrdata_length * sizeof (UINT16)字节前进。

通常,sizeof (UINT16)为 2,并且

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

当您将整数添加到指针值时,实际上是在移动指针的字节数与将data_length UINT16s 在内存中移动所需的字节数一样多,而不是data_length字节数。

于 2013-05-10T19:02:43.727 回答