在可以附加指針的typedef(或結構體)中,不存在字段width
。該字段僅在物理上存在於該類型的具體對象中。所以,你不能有一個指向結構體的width
的指針。您只能有指向box1.width
,box2.width
等的指針。
不可能以某種方式編寫一個函數,它將在所有現有對象中改變width
。更確切地說,不可能編寫一個函數,以某種方式神奇地枚舉該類型的所有現有對象,並在其中更改字段width
。你有責任告訴你的函數你想改變哪些對象。
無論如何,你想要做什麼?
如果你想寫將運行時間與特定區域來設定,如果可以在C通過補償來實現參數化一個「二傳手」的作用。例如
void set_value(box *box, size_t offset, int value) {
*(int *) ((char *) box + offset) = value;
}
box box1;
box box2;
box box3;
void set_values(size_t offset, int value)
{
set_value(&box1, offset, value);
set_value(&box2, offset, value);
set_value(&box3, offset, value);
}
現在呼籲
set_values(offset_of(box, width), 42);
將在box1
,box2
和box3
設置寬度以42
,同時呼籲
set_values(offset_of(box, height), -5);
將這些對象設置的高度,以-5
。
但是,您有責任確保函數知道哪些對象必須更改。在上面的例子中,我只是將它們聲明爲文件範圍變量。在現實生活中,通常情況下不可能。
來源
2013-06-25 21:44:38
AnT
你不能陣列。沒有全局。但不要打擾。 –
'typedef'只給結構賦予一個新的名字。你可以用它做任何事情都沒有。 – Elazar
爲什麼不使用數組? 'SetWidth(size_t arraySize,box array [],int desiredWith)'? – Dai