이 코드에서 무슨 일이 일어나고 있는지 이해할 수 없습니다.
수신기 func는 원래 구조 사용자(포인터 때문에)에서 작동하므로 func 내부에서 원래 obj를 변경합니다. 그러나 구조 주소도 원본 "a"의 원본입니까 아니면 복사본입니까?
으아악이것이 내 결과물입니다
으아악이를 통해 u.address가 변경되었음을 이해하고 "u" 안의 "a"가 원래 obj와 다르다는 것도 알 수 있습니다. 그렇다면 무대 뒤에서 그리고 기억 속에서 정확히 무슨 일이 일어나는 걸까요? 출력에 따르면 이 동작은 전혀 예상하지 못한 것입니다. 나는 포인터가 있기 때문에 두 경우 모두 원래 객체("a"와 "u")를 사용할 것으로 예상했습니다. 두 번째로(func 'update..' 이후) fmt.println(a)을 인쇄하면 {peremohy kyiv}가 표시됩니다. 두 번째로 fmt.println(u)가 {valeriy zalyzhnyi {peremohy kyiv}}
뒤에서 무슨 일이 일어나고 있는지 이해하려면 코드가 수행하는 작업을 시각화하는 것이 유용할 수 있습니다.
으아악는 다음과 같이 세분화됩니다.
으아악그래서 1개의 user{}
实例和 2 个 address{}
인스턴스에 메모리를 할당했습니다. 두 번째 주소 인스턴스의 값은 첫 번째 주소 인스턴스(사본이 생성된 당시)의 정확한 복사본입니다.
이제 updatestreet
时,它是通过指针在 u
上调用的,它不会创建 user
实例的副本,而是对内存地址 0x000002
进行操作,因此它实际上对同一个 a
를 호출하면 변수가 동작합니다. 따라서 표현은:
는 다음과 같이 해석됩니다. 메모리 주소 0x000002에 있는 값에서 address
的字段,在该字段中,访问字段 street
라는 값에 액세스하여 새 값을 할당합니다. 이것을 위에서 만든 테이블에 매핑해 보겠습니다.
함수가 반환된 후에도 이전과 같이 메모리의 동일한 위치에 동일한 개체가 있지만 메모리의 주소를 통해 a
的值,所以 updatestreet
函数所做的更改已经完成为 u
값에 액세스했기 때문입니다(동일한 메모리 주소를 사용했기 때문입니다).
Variable a
在赋值给 u.address
时被复制,因此它的内存地址未知,或者传递给 updatestreet
기능이므로 변경되지 않습니다.
위 내용은 이러한 구조의 뒤에서 무슨 일이 벌어지고 있는 걸까요? 구조체가 복사됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!