2014-09-10 98 views
4

我得到的,因为这行意在通过在0x200增加指针(以点到下一段)表达必须有整数类型

Flash_ptr = Flash_ptr + (unsigned char *) 0x200; 

心中已经看到this的是编译错误,但我没有使用任何非法的符号!

P.S.指针的初始化:

unsigned char * Flash_ptr = (unsigned char *) 0x20000; 
+4

该语言不允许您添加指针(它没有多大意义)。您可以改为添加一个整数值。 – juanchopanza 2014-09-10 09:28:32

回答

4

您不能添加两个指针。您可以将一个整数添加到指针中,并且可以减去两个指针以获得整数差异,但添加两个指针是没有意义的。为了解决您的问题,所以你只需要删除投:

Flash_ptr = Flash_ptr + 0x200; 

这通过在0x200 元素递增Flash_ptr,但由于Flash_ptrunsigned char *型,则这只是转化成的在0x200 字节的增量。

为了使一个循环的这一部分,检查是否有上限,你会做这样的事情:

while (Flash_ptr < (unsigned char *)0x50000) // loop until Flash_ptr >= 0x50000 
{ 
    // ... do something with Flash_ptr ... 
    Flash_ptr += 0x200; 
} 
+0

你说得对,错误消失了,但是我怎么才能检查指针是否指向地址0x50000或更少? 这只是不起作用: \t while(Flash_ptr <0x50000) – 2014-09-10 09:35:15

+0

在OP代码中使用无效指针* addition *会更好吗? – 2014-09-10 09:35:18

+1

@OgeeGee:您需要明确地转换其中一个操作数,例如'while((uintptr_t)Flash_ptr <0x50000)'。 – mafso 2014-09-10 09:39:27

0

不能添加两个指针。你可以做的是增加指针所持有的地址。删除(unsigned char *)演员。

如果您有兴趣,请阅读有关指针算术here的更多信息。

相关问题