我想通過將指針傳遞給另一個函數並通過指針修改它來修改靜態結構對象。 但即使執行修改函數後,結構的值也是完整的。傳遞指向靜態結構對象的指針
void some_functon_a(....)
{
static struct some_struct obj;
modifier_function_b(&obj);
// obj is not modified as expected in fact not at all
}
void modifier_function_b(struct some_struct *ptr)
{
// modifying the struct using ptr
}
此外,當我對這個代碼運行GDB,我儘快看到的碼流進入modifier_function_b()函數GDB報告變量PTR兩個條目:PTR和PTR @條目。所有的修改都是在ptr上完成的,而指向obj的實際位置的ptr @ entry沒有被修改。有人能指出可能發生的事情嗎?是指向靜態變量類型的const指針,我們不能修改它們超出其範圍?
還有一件事...如果我刪除靜態限定符,這導致我認爲指向靜態的指針是一種常量指針,則不會看到此行爲。提前:)
究竟是modifier_function-b中的代碼?編譯完成後,Const'ness會丟失,所以沒有「不,不要讓它改變」。 – xaxxon
我猜你的修改代碼是錯誤的,因爲我剛剛寫了一些與你的描述相對應的東西,並沒有出現這個問題。請參閱下面的答案。 – xaxxon
另外,你爲什麼期待改變的指針? – xaxxon