如何清除指针变量,该指针变量需要从开始位置的20个字节的数据中清除内存位置的起始地址
问题描述:
指针变量保存的值只是需要为下一个清除的内存位置的地址20个字节的数据。如何清除指针变量,该指针变量需要从开始位置的20个字节的数据中清除内存位置的起始地址
我试过下面的代码片段,但它清除指针值(开始内存位置的地址)的值。通过这样做,我失去了内存位置的起始地址(指针值)。
srcadr = 0x105fc080;
i = 20;
*srcptr = &srcadr
if(srcptr != NULL)
{
while (i < 20)
{
*srcptr++ = 0x00;
}
}
答
您的代码不完整。
但是让我们假设这第一行是有效的:
srcadr = 0x105fc080;
这意味着srcadr
可以一个unsigned int(或无符号长)。
然后,我们需要把它看成一个指针,并从该地址明确的20个字节:
volatile unsigned char * const area = (unsigned char *) srcadr;
for(int i = 0; i < 20; ++i)
area[i] = 0;
演员是必要的,以便处理的地址值作为一个指针。使用&srcadr
毫无意义,它给了我们指针变量的地址,这是不相关的。
为未来的读者请注意:如果你可以,当然你只需要使用memset()
这个像这样:
memset((void *) 0x105fc080, 0, 20);
和完成。但是OP无论如何都不能使用它,也许这是一个嵌入式环境,它具有有限的标准库(并且,呃,没有内在的沉闷编译器)。
答
如果您只想将20字节的内存设置为0,则可以使用memset。 所有你需要做的是:
#include <string.h>
mem_len = 20
mem_value = 0
ptr = 0x105fc080
memset(ptr. mem_value, mem_len)
此代码没有任何意义。 '* srcptr =&srcadr'设置指针指向'srcadr'的地址,而不是指向绝对地址'0x105fc080'。而且,没有看到变量声明,没有人能回答这个问题。 – Lundin
另外,这与嵌入式系统,智能指针和void指针有什么关系? – Lundin
空气中是否有强烈的XY-问题气味? –