假設我被給了一個結構,並且我需要將它的所有屬性都分配給一個特定的地址。下面的代碼給了我一個條件錯誤,但我並沒有試圖評估它。更改C的結構地址
struct header block_o_data;
block_o_data.a = 1;
block_o_data.b = 2;
void* startingAddress = sbrk(0);
&block_o_data = *address;
請讓我知道我做錯了什麼。
假設我被給了一個結構,並且我需要將它的所有屬性都分配給一個特定的地址。下面的代碼給了我一個條件錯誤,但我並沒有試圖評估它。更改C的結構地址
struct header block_o_data;
block_o_data.a = 1;
block_o_data.b = 2;
void* startingAddress = sbrk(0);
&block_o_data = *address;
請讓我知道我做錯了什麼。
假設你有一個這樣的結構:
struct mystruct {
int a;
char b;
};
那麼你可能需要這樣的東西:
// A pointer variable supposed to point to an instance of the struct
struct mystruct *pointer;
// This is a general address represented by void*
void *addr = some_function(0);
// Cast that general address to a pointer varibale pointing to
// an instance of the struct
pointer = (struct mystruct *) addr;
// Use it!
printf("%d", pointer->a);
「 - >」運算符是什麼意思? – user287474
@ user287474 http://stackoverflow.com/questions/2575048/arrow-operator-usage-in-c –
所以這將是有效的:「pointer-> a = 1」 在分配數據到指針? – user287474
在分配給block_o_data
時,您正在接收地址並嘗試爲其分配值。變量的地址不是左值,這表示該表達式不能出現在賦值的左側。
你需要一個指針聲明一個struct,然後分配給它的價值實際上居住的地址:
struct header *block_o_data;
void* startingAddress = sbrk(0);
block_o_data = startingAddress;
如果我在嘗試爲其設置地址之前將值分配給block_o_data,這仍然有效嗎? – user287474
你永遠不會改變C在整個生命週期中的地址。地址是對象的身份。 – 5gon12eder