大意了,又一次遇到指针问题

又一次遇到一个指针引起的问题,没有让他成为bug,呵呵。

看看这条语句:
memcpy(&g_GlobalBuf+DF_POSI_FEE_RATE,(const u8 *)&FeeRate,70);
本意是要把FeeRate数组中的内容拷贝到u8型数组g_GlobalBuf数组中从第 DF_POSI_FEE_RATE 个元素开始的空间中。但实际得到的结果是  &g_GlobalBuf+DF_POSI_FEE_RATE 指向的地址偏移了十万八千里,实际上错误的偏移量为 sizeof( g_GlobalBuf )* DF_POSI_FEE_RATE,也就是说偏移了 DF_POSI_FEE_RATE个 g_GlobalBuf数组的空间。

原因:很简单, &g_GlobalBuf 是一个指向数组的指针,而不是一个 u8* 指针,所以  &g_GlobalBuf+1 指向的是下一个数组的首地址而不是 g_GlobalBuf[1] 这个元素。

正确的写法: &g_GlobalBuf[DF_POSI_FEE_RATE ]  或者 (u8 *)( &g_GlobalBuf )+ DF_POSI_FEE_RATE

———————-添加一个指针与数组的小知识点  2014/10/28  —————————–

定义: char a[2][10],则如下:
+ &a 0x0012ff20 unsigned char [2][10]*
+ &a[0] 0x0012ff20 unsigned char [10]*
+ &a[0][0] 0x0012ff20 unsigned char *

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/%e5%a4%a7%e6%84%8f%e4%ba%86%ef%bc%8c%e5%8f%88%e4%b8%80%e6%ac%a1%e9%81%87%e5%88%b0%e6%8c%87%e9%92%88%e9%97%ae%e9%a2%98/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名