이 표현식의 결과는 동일합니까?포인터 연산 - 동일한 표현식입니까?
&(*ptr) += 4 // Expression 1
ptr += 4 // Expression 2
저는 주로 Java 개발자이며 VS2008에서 VS2015로 이전 프로젝트를 다시 컴파일해야합니다. 위의 첫 번째 행은 왼쪽 피연산자가 수정 가능한 l 값이 아니기 때문에 컴파일 오류가 발생합니다. 문제는 첫 번째 표현식 대신 두 번째 표현식을 사용할 수 있는지의 문제입니다.
ptr은 char*
입니다.
통찰력 및/또는이 문제에 대한 도움에 매우 감사드립니다.
그래서 첫 번째 _did_가 VS2008에서 컴파일됩니다. 만약 그렇다면, 컴파일러는 비표준적인 일을하고 있었고, 실제로'ptr'의 값을 변경했는지 또는 임시 포인터의 값을 변경하고 그 결과를 던져 버렸는지는 분명하지 않았습니다. 나는주의를 권고한다. –
예. 컴파일러는 첫 번째 표현식에 액세스 할 수 없다는 것을 알고 있으므로 문제가 있음을 알게되었습니다. 두려워서 나는 끊임없이 일해 온 것을 바로 잡을 것입니다. – Sarynn
첫 번째 것은 어리 석다. 솔직히 나는 그 요점이 무엇인지 알지 못했다. 나는 더 많은 맥락이 필요하다고 생각한다. 컴파일러가 임시 주소를 수정하려는 첫 번째 시도를 말하고 있기 때문에 컴파일하는 경우'ptr '에 아무런 영향을 미치지 않을 것이므로 항상 동일한 컴파일러를 사용하고 직접 볼 수 있기 때문에 그들은 동일하지 않습니다. – George