정적 구조체 객체를 수정하려면 포인터를 다른 함수에 전달하고 그 포인터를 포인터로 수정하십시오. 그러나 수정 기능을 실행 한 후에도 구조체의 값은 손상되지 않습니다. PTR 및 PTR @ 항목 :이 코드에서 GDB를 실행하면 코드의 흐름이 modifier_function_b() 함수 GDB가 변수 PTR에 대한 두 개의 항목을보고 들어가는포인터를 정적 구조체 객체에 전달합니다.
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
}
또한, 나는 즉시 참조하십시오. obt의 실제 위치를 가리키는 ptr @ entry는 수정되지 않은 반면 모든 수정은 ptr에서 수행됩니다. 누군가 여기서 일어날 수있는 일을 지적 할 수 있습니까? 정적 변수에 대한 포인터가 const 포인터와 같습니까? 범위 밖에서 포인터를 수정할 수 없습니까?
한 가지 더 ... 정적 인 포인터를 정적 포인터라고 생각하게하는 정적 한정자를 제거하면이 동작이 보이지 않습니다.
미리 감사드립니다. :)
정확하게 modifier_function-b에있는 코드는 무엇입니까? Const'ness는 편집이 끝나면 없어 지므로, "아니오, 계속 변경하지 마라"라는 말은 없습니다. – xaxxon
방금 귀하의 설명에 해당하는 내용을 작성 했으므로 수정 코드가 잘못되었다고 추측합니다.이 문제는 발생하지 않습니다. 아래 내 대답을 참조하십시오. – xaxxon
또한 포인터가 바뀌기를 기대하는 이유는 무엇입니까? – xaxxon