Go 언어 비교 C++ 참조 매개변수 전달
이 글에서는 Go에 참조에 의한 매개변수 전달(C++과 비교)이 있는지 여부를 주로 소개합니다. 필요한 친구는
C++
값 전달:
가장 일반적입니다. 매개변수 전달 방법 함수의 형식 매개변수는 실제 매개변수의 복사본입니다. 함수 내에서 형식 매개변수를 변경해도 함수 외부의 형식 매개변수에는 영향을 미치지 않습니다. 일반적으로 값 전달은 호출자에게 영향을 주지 않고 함수 내의 매개변수를 수정할 때 사용됩니다.
포인터 전달
형식 매개변수는 실제 매개변수의 주소를 가리키는 포인터입니다. 이름에서 알 수 있듯이 형식 매개변수가 가리키는 내용이 함수 내에서 조작되면 실제 매개변수 자체가 수정됩니다. .
참조로 전달
C++에서 참조는 변수의 별칭이며 실제로는 동일하며 메모리의 동일한 주소에도 존재합니다. 즉, 참조가 조작될 때마다 참조된 변수가 매우 직접적으로 조작됩니다.
아래 데모를 보세요:
#include <iostream> //值传递 void func1(int a) { std::cout << "值传递,变量地址:" << &a << ", 变量值:" << a << std::endl; a ++ ; } //指针传递 void func2 (int* a) { std::cout << "指针传递,变量地址:" << a << ", 变量值:" << *a << std::endl; *a = *a + 1; } //引用传递 void func3 (int& a) { std::cout << "指针传递,变量地址:" << &a << ", 变量值:" << a << std::endl; a ++; } int main() { int a = 5; std::cout << "变量实际地址:" << &a << ", 变量值:" << a << std::endl; func1(a); std::cout << "值传递操作后,变量值:" << a << std::endl; std::cout << "变量实际地址:" << &a << ", 变量值:" << a << std::endl; func2(&a); std::cout << "指针传递操作后,变量值:" << a << std::endl; std::cout << "变量实际地址:" << &a << ", 变量值:" << a << std::endl; func3(a); std::cout << "引用传递操作后,变量值:" << a << std::endl; return 0; }
출력 결과는 다음과 같습니다.
변수 실제 주소: 0x28feac, 변수 값: 5
값 전송, 변수 주소: 0x28fe90, 변수 값: 5
값 이후 전송 연산, 변수 값: 5
변수의 실제 주소: 0x28feac, 변수 값: 5
포인터 전송, 변수 주소: 0x28feac, 변수 값: 5
포인터 전송 연산 후, 변수 값: 6
변수의 실제 주소: 0x28feac , 변수값: 6
포인터 전송, 변수 주소: 0x28feac, 변수값: 6
참조 전송 연산 후, 변수값: 7
Go에서 전달되는 매개변수
위에서는 3가지 매개변수 전달 방법을 소개합니다. C++, 값 전달 및 포인터 전달은 이해하기 쉽습니다. 그렇다면 Go에도 이러한 매개변수 전달 방법이 있습니까? 이는 논란을 불러일으켰지만 C++의 참조 전달 개념과 비교하면 Go에는 참조 전달 방법이 없다고 말할 수 있습니다. 왜 내가 이런 말을 하는가? Go에는 변수 참조라는 개념이 없기 때문이다. 하지만 Go에는 참조 유형이 있는데 이에 대해서는 나중에 설명하겠습니다.
먼저 Go에서 값과 포인터를 전달하는 예를 살펴보겠습니다:
package main import ( "fmt" ) func main() { a := 1 fmt.Println( "变量实际地址:", &a, "变量值:", a) func1 (a) fmt.Println( "值传递操作后,变量值:", a) fmt.Println( "变量实际地址:", &a, "变量值:", a) func2(&a) fmt.Println( "指针传递操作后,变量值:", a) } //值传递 func func1 (a int) { a++ fmt.Println( "值传递,变量地址:", &a, "变量值:", a) } //指针传递 func func2 (a *int) { *a = *a + 1 fmt.Println( "指针传递,变量地址:", a, "变量值:", *a) }
출력 결과는 다음과 같습니다.
변수의 실제 주소: 0xc04203c1d0 변수 값: 1
값 전송, 변수 주소: 0xc04203c210 변수 값: 2
값 전송 연산 후 변수 값: 1
변수 실제 주소: 0xc04203c1d0 변수 값: 1
포인터 전송, 변수 주소: 0xc04203c1d0 변수 값: 2
포인터 전송 연산 후 변수 값: 2
될 수 있습니다. Go 기본 유형이 값으로 전달되는 것을 볼 수 있습니다. 포인터 전달은 C++와 다르지 않지만 변수 참조 개념이 없습니다. 그렇다면 Go의 참조 유형을 어떻게 이해합니까?
Go의 참조 유형
Go에서 참조 유형에는 슬라이스, 사전, 채널 등이 포함됩니다. 슬라이싱을 예로 들어보겠습니다. 슬라이스를 참조로 전달합니까?
예:
package main import ( "fmt" ) func main() { m1 := make([]string, 1) m1[0] = "test" fmt.Println("调用 func1 前 m1 值:", m1) func1(m1) fmt.Println("调用 func1 后 m1 值:", m1) } func func1 (a []string) { a[0] = "val1" fmt.Println("func1中:", a) }
출력 결과는 다음과 같습니다.
func1 호출 전 m1 값: [test]
func1: [val1]
func1 호출 후 m1 값: [ val1]
함수에서 슬라이스에 대한 수정 사항은 실제 매개변수 값에 영향을 미칩니다. 이것이 참조에 의한 전달이라는 뜻인가요?
사실 그렇지 않습니다. 이 질문에 대답하려면 먼저 호출 함수 슬라이스 m1이 변경되었는지 확인해야 합니다. 먼저 슬라이싱의 본질을 이해해야 합니다.
슬라이스(Slice)는 배열 조각에 대한 설명입니다. 여기에는 조각의 길이인 배열에 대한 포인터가 포함되어 있습니다.
즉, 위에서 인쇄한 것은 슬라이스 자체가 아니라 슬라이스가 가리키는 배열입니다. 또 다른 예로 슬라이스가 변경되었는지 확인합니다.
package main import ( "fmt" ) func main() { m1 := make([]string, 1) m1[0] = "test" fmt.Println("调用 func1 前 m1 值:", m1, cap(m1)) func1(m1) fmt.Println("调用 func1 后 m1 值:", m1, cap(m1)) } func func1 (a []string) { a = append(a, "val1") fmt.Println("func1中:", a, cap(a)) }
출력 결과는 다음과 같습니다.
func1 호출 전 m1 값: [test] 1
func1: [test val1] 2
func1 호출 전 m1 값: [test] 1
이 결과는 통화 전후에 슬라이스가 변경되지 않았음을 보여줍니다. 앞의 예에서 말하는 "변경"은 실제로 슬라이스의 배열에 대한 포인터가 가리키는 배열의 요소가 변경된 것입니다. 이 문장은 다소 어색할 수 있지만 실제로는 그렇습니다. 참조 유형의 매개변수 전달이 참조별 전달이 아님을 다시 한 번 증명합니다.
슬라이스란 배열 조각에 대한 설명입니다. 여기에는 배열에 대한 포인터와 조각의 길이가 포함되어 있습니다. 관심이 있으시면 http://www.jb51.net/kf/201604/499045.html 문서를 읽어보세요. 슬라이싱의 메모리 모델에 대해 알아보세요.
Summary
요약은 아주 간단하고, 언어도 현상을 꿰뚫어 봐야 본질을 볼 수 있습니다. 기억해야 할 이 글의 결론도 있습니다:
Go에는 참조에 의한 전달이 없습니다.
위 내용은 Go 언어 비교 C++ 참조 매개변수 전달의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

iPhone이 가장 사용자 친화적인 전자 기기 중 하나라는 사실은 비밀이 아니며, 그 이유 중 하나는 원하는 대로 쉽게 개인화할 수 있다는 것입니다. 개인화에서는 iPhone을 설정할 때 선택한 언어와 다른 언어로 언어를 변경할 수 있습니다. 여러 언어에 익숙하거나 iPhone의 언어 설정이 잘못된 경우 아래 설명에 따라 변경할 수 있습니다. iPhone 언어 변경 방법 [3가지 방법] iOS를 사용하면 사용자가 iPhone에서 선호하는 언어를 자유롭게 전환하여 다양한 요구에 적응할 수 있습니다. Siri와의 상호 작용 언어를 변경하여 음성 지원과의 의사소통을 용이하게 할 수 있습니다. 동시에 로컬 키보드를 사용하면 여러 언어 간을 쉽게 전환하여 입력 효율성을 높일 수 있습니다.

현재 통화계에서 선호하는 잠재적 코인으로는 SOL 코인과 BCH 코인이 있습니다. SOL은 솔라나 블록체인 플랫폼의 기본 토큰이며 비트코인의 포크 통화인 BitcoinCash 프로젝트의 토큰입니다. 기술적 특성, 적용 시나리오, 개발 방향이 다르기 때문에 투자자들이 둘 중 하나를 선택하기가 어렵습니다. SOL 통화와 BCH 중 어느 것이 더 잠재력이 있는지 분석하고 싶습니다. 다시 투자하세요. 그러나 통화를 비교하려면 시장, 개발 전망, 프로젝트 강도 등에 따른 종합적인 분석이 필요합니다. 다음에는 에디터가 자세히 알려드리겠습니다. SOL 코인과 BCH 중 어느 것이 더 잠재력이 있나요? 이에 비해 SOL 통화는 더 많은 잠재력을 가지고 있습니다. SOL 통화 또는 BCH 중 어느 것이 더 많은 잠재력을 가지고 있는지 결정하는 것은 많은 요인에 따라 달라지기 때문에 복잡한 문제입니다.

오늘날의 스마트폰 시장에서 소비자는 점점 더 많은 선택에 직면해 있습니다. 지속적인 기술 개발로 인해 휴대폰 제조업체는 점점 더 많은 모델과 스타일을 출시했으며 그중 Vivox100과 Vivox100Pro는 의심할 여지 없이 많은 관심을 끄는 두 가지 제품입니다. 두 휴대폰 모두 잘 알려진 브랜드인 Vivox에서 생산되지만 기능, 성능, 가격 면에서 일정한 차이가 있습니다. 그렇다면 이 두 휴대폰을 마주할 때 어느 휴대폰을 구매하는 것이 더 가치가 있을까요? Vivox100과 Vivox100Pro의 외관 디자인에는 분명한 차이가 있습니다.

TV 박스는 인터넷과 TV를 연결하는 중요한 장치로서 최근 몇 년 동안 점점 더 대중화되고 있습니다. 스마트 TV의 인기로 인해 소비자들은 Tmall, Xiaomi, ZTE 및 Huawei와 같은 TV 박스 브랜드를 점점 더 선호하고 있습니다. 독자들이 자신에게 가장 적합한 TV 상자를 선택할 수 있도록 돕기 위해 이 기사에서는 이 네 가지 TV 상자의 기능과 장점을 심층적으로 비교할 것입니다. 1. Huawei TV Box: 스마트 시청각 경험이 뛰어나고 원활한 시청 경험을 제공할 수 있습니다. Huawei TV Box는 강력한 프로세서와 고화질 화질을 갖추고 있습니다. 온라인 비디오, 내장된 풍부한 응용 프로그램, 음악 및 게임 등 다양한 오디오 및 비디오 형식을 지원합니다. Huawei TV box에는 음성 제어 기능도 있어 작동이 더욱 편리해졌습니다. 원클릭 캐스팅으로 휴대폰에 있는 콘텐츠를 TV 화면으로 쉽게 전송할 수 있습니다.

Windows 10 vs. Windows 11 성능 비교: 어느 것이 더 낫나요? 지속적인 기술 개발과 발전으로 운영 체제는 지속적으로 업데이트되고 업그레이드됩니다. 세계 최대 운영 체제 개발자 중 하나인 Microsoft의 Windows 운영 체제 시리즈는 항상 사용자로부터 많은 관심을 받아 왔습니다. 2021년에 Microsoft는 Windows 11 운영 체제를 출시하여 광범위한 논의와 관심을 불러일으켰습니다. 그렇다면 Windows 10과 Windows 11의 성능 차이는 무엇입니까?

때로는 컴퓨터 시스템을 설치했는데 시스템이 영어로 되어 있는 경우가 있습니다. 이 경우 컴퓨터 언어를 중국어로 변경해야 합니다. 이제 win10 시스템에서 컴퓨터 언어를 중국어로 변경하는 방법을 알려주세요. . win10에서 컴퓨터 언어를 중국어로 변경하는 방법 1. 컴퓨터를 켜고 왼쪽 하단에 있는 시작 버튼을 클릭합니다. 2. 왼쪽의 설정 옵션을 클릭하세요. 3. 열리는 페이지에서 "시간 및 언어"를 선택합니다. 4. 연 후 왼쪽의 "언어"를 클릭합니다. 5. 여기에서 원하는 컴퓨터 언어를 설정할 수 있습니다.

제목: Go 언어와 다른 프로그래밍 언어의 성능 비교, 장단점 컴퓨터 기술이 지속적으로 발전함에 따라 프로그래밍 언어의 선택이 점점 더 중요해지고 있으며, 그 중 성능이 중요한 고려 사항입니다. 이 기사에서는 Go 언어를 예로 들어 Go 언어의 성능을 다른 일반적인 프로그래밍 언어와 비교하고 각각의 장점과 단점을 분석합니다. 1. Go 언어 개요 Go 언어는 Google에서 개발한 오픈 소스 프로그래밍 언어로, 빠른 컴파일, 효율적인 동시성, 간결성 및 쉬운 가독성이라는 특징을 가지고 있으며 네트워크 서비스, 분산 시스템, 클라우드 컴퓨팅 및 개발에 적합합니다. 다른 분야. 가다

Vivox100과 Vivox100Pro의 비교 평가: 어느 것을 더 선호하시나요? 스마트폰이 더욱 대중화되고 강력해짐에 따라 휴대폰 액세서리에 대한 사람들의 수요도 늘어나고 있습니다. 휴대폰 액세서리의 필수 부품인 헤드폰은 사람들의 일상 생활과 업무에서 중요한 역할을 합니다. 많은 헤드폰 브랜드 중에서 가장 주목을 받고 있는 제품은 Vivox100과 Vivox100Pro 두 가지입니다. 오늘은 이 두 헤드폰에 대한 자세한 비교 평가를 실시하여 장점과 단점을 알아보겠습니다.
