指针变量保存的值只不过是内存位置的地址,需要清除接下来的 20 个字节的数据。
我尝试了下面的代码片段,但它清除了指针值的值(起始内存位置的地址)。通过这样做,我丢失了内存位置的起始地址(指针值)。
srcadr = 0x105fc080;
i = 20;
*srcptr = &srcadr
if(srcptr != NULL)
{
while (i < 20)
{
*srcptr++ = 0x00;
}
}
最佳答案
您的代码不完整。
但是我们假设第一行是有效的:
srcadr = 0x105fc080;
这意味着srcadr
可以是无符号整型(或无符号长整型)。
然后我们需要将其视为指针,并从该地址清除 20 个字节:
volatile unsigned char * const area = (unsigned char *) srcadr;
for(int i = 0; i < 20; ++i)
area[i] = 0;
为了将地址值视为指针,必须进行强制转换。使用 &srcadr
根本没有任何意义,它为我们提供了 srcadr
指针变量的地址,这是不相关的。
future 读者请注意:如果可以的话,您当然可以像这样使用 memset()
:
memset((void *) 0x105fc080, 0, 20);
然后就完成了。但无论出于何种原因,OP 都无法使用它,例如,它可能是一个具有有限标准库的嵌入式环境(以及,呃,没有内在函数的沉闷编译器)。
关于c - 如何清除保存内存位置起始位置的指针变量,该变量需要从起始位置清除 20 个字节的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46711882/