C 即使在正确的强制转换之后,增加空指针时也需要左值
我正在实现memset方法。下面是代码片段:C 即使在正确的强制转换之后,增加空指针时也需要左值,c,lvalue,memset,C,Lvalue,Memset,我正在实现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; } 当我将ptr的类型从void*更改为int*时,它会 为什么它要求左值 void my_memset(void* ptr, int n, size_t s
void my_memset(void* ptr, int n, size_t size)
{
unsigned int i;
for( i = 0; i < size; ++i, ++(char*)ptr )
*(char*)ptr = n;
}
当我将ptr的类型从void*更改为int*时,它会
为什么它要求左值
void my_memset(void* ptr, int n, size_t size)
{
char *cptr = (char *)ptr;
char *limit = cptr + size;
for(; cptr < limit; cptr++) {
*cptr = n;
}
}
你不能通过这样的施法增加,你不应该这样做
您不能通过这样的强制转换递增,您也不应该这样做。类型强制转换的结果不是左值。说
float f = 3.14;
++((int)f);
这里我们将对一个int值应用++运算符,但是我们没有一个int变量来递增。所以在一般情况下,类型转换不能产生左值。类型转换的结果不是左值。说
float f = 3.14;
++((int)f);
这里我们将对一个int值应用++运算符,但是我们没有一个int变量来递增。因此,在一般情况下,类型转换不能产生左值。您不能产生左值的原因与您不能这样做的原因相同:
++someFunction();
或
强制转换是一个表达式,表达式的结果没有可写存储。您不能这样做的原因与您不能这样做的原因相同:
++someFunction();
或
强制转换是一个表达式,表达式的结果没有可写存储