我有以下代碼: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