2016-03-04 61 views
0

假設我被給了一個結構,並且我需要將它的所有屬性都分配給一個特定的地址。下面的代碼給了我一個條件錯誤,但我並沒有試圖評估它。更改C的結構地址

struct header block_o_data; 
block_o_data.a = 1; 
block_o_data.b = 2; 
void* startingAddress = sbrk(0); 
&block_o_data = *address; 

請讓我知道我做錯了什麼。

+0

你永遠不會改變C在整個生命週期中的地址。地址是對象的身份。 – 5gon12eder

回答

1

假設你有一個這樣的結構:

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); 
+0

「 - >」運算符是什麼意思? – user287474

+0

@ user287474 http://stackoverflow.com/questions/2575048/arrow-operator-usage-in-c –

+0

所以這將是有效的:「pointer-> a = 1」 在分配數據到指針? – user287474

3

在分配給block_o_data時,您正在接收地址並嘗試爲其分配值。變量的地址不是左值,這表示該表達式不能出現在賦值的左側。

你需要一個指針聲明一個struct,然後分配給它的價值實際上居住的地址:

struct header *block_o_data; 
void* startingAddress = sbrk(0); 
block_o_data = startingAddress; 
+0

如果我在嘗試爲其設置地址之前將值分配給block_o_data,這仍然有效嗎? – user287474