我有以下代码:C,错误:表达式必须为可修改的左值
#define NULL ((void*)0)
void* Globalptr = NULL;
void func(ptrtype* input)
{
((ptrtype*)Globalptr) = input;
}
我得到线((ptrtype*)Globalptr) = input;
错误说“表达必须修改的左值”
我有以下代码:C,错误:表达式必须为可修改的左值
#define NULL ((void*)0)
void* Globalptr = NULL;
void func(ptrtype* input)
{
((ptrtype*)Globalptr) = input;
}
我得到线((ptrtype*)Globalptr) = input;
错误说“表达必须修改的左值”
必须使数据相匹配的变量(左值),并不会改变变量的类型相匹配的数据:
Globalptr = (void*)input;
但因为你可以将任何数据指针转换为void*
C,你可以简单地做:
Globalptr = input;
当使用空指针,必须强制类型转换一样
Globalptr = (void *)input;
,而不是像
((ptrtype*)Globalptr) = input;
'Globalptr =(ptrtype *)input;'在这种情况下没有意义,因为它已经是ptrtype * – 2014-10-20 11:59:17
请确保您应该包括页眉文件stdlib.h引入NULL,也不要像你所做的那样自行创建NULL。
#include<stdlib.h>
void* Globalptr = NULL;
void func(ptrtype* input)
{
Globalptr = input;
}
这始终工作无论指针的类型是(在函数内部,为你的):
Pointer_Type pointer_1 = *((Pointer_Type*) pointer_2);
这本来是有道理的,如果GlobalPtr是类型的“ptrtype *”,并输入了键入“无效*”像下面的:
ptrtype *Globalptr = NULL;
void func(void *input)
{
Globalptr = (ptrtype *)input;
}
你的情况,你可以做的就是从Globalptr“无效*”到“ptrtype *”转换。 像其他人一样,不应该以这种方式使用“NULL”。
这里真正的问题是演员阵产生一个右值,赋值运算符的左操作数需要一个可修改的左值。
这就是为什么表达式((ptrtype *)Globalptr)不正确,正如其他人指出的那样,在赋值运算符的右侧进行转换。详情请参阅lvalue_rvalue_link。
为什么你需要#define NULL?需要对值进行类型转换以适应变量。 – Gopi 2014-10-20 12:01:19
应该通过包含'stdlib.h'或其他定义它的头文件来引入'NULL';不要自己写。 – 2014-10-20 12:02:23