c - 如何清除保存内存位置起始位置的指针变量,该变量需要从起始位置清除 20 个字节的数据

标签 c pointers embedded

指针变量保存的值只不过是内存位置的地址,需要清除接下来的 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/

相关文章:

c - 如何在 C 中最近创建的文件夹和文件中具有读取权限?

c - 如何提高 CMWX1ZZABZ-091 RTC(实时时钟)的精度

c - 下面的c逻辑有什么问题?

c++ - 在 C++ 中动态创建 vector 并添加到 map

c++ - 参数中的指针和引用

objective-c - 使用指针复制二维数组

c - Yocto 项目如何使用 Yocto 插件将库添加到 Eclipse

python - python-如何将C函数实现为可等待的(协程)

c - 显式忽略 NULL 值,但 C 的行为很奇怪

c - C中变量的逻辑内存地址