1

我正在实施memset()方法。下面是代码片段:

void my_memset(void* ptr, int n, size_t size)
{
    unsigned int i;

    for( i = 0; i < size; ++i, ++(char*)ptr )
            *(char*)ptr = n;
}

我收到的错误是:

prog.cpp: In function ‘void my_memset(void*, int, size_t)’:
prog.cpp:8: error: lvalue required as increment operand

当我将 ptr 的类型从 更改为void*int*,它编译成功

为什么它要求左值?

4

3 回答 3

4
void my_memset(void* ptr, int n, size_t size)
{
    char *cptr = (char *)ptr;
    char *limit = cptr + size;

    for(; cptr < limit; cptr++) {
        *cptr = n;
    }
}

你不能通过这样的演员阵容增加,你不应该想要。

于 2012-08-20T11:39:56.747 回答
2

类型转换的结果不是左值。说,

float f = 3.14;
++((int)f);

在这里,我们将++运算符应用于 int 值,但我们没有要递增的 int 变量。所以在一般情况下,类型转换不能产生左值。

于 2012-08-20T11:44:15.917 回答
0

您不能这样做的原因与您不能这样做的原因相同:

++someFunction();

或者

 ++(a + b);

强制转换是一个表达式,表达式的结果没有可写存储。

于 2012-08-20T11:49:00.683 回答