포인터와 C + +의 견해를 언급하는 부분은 2
포인터와 참조, 어떤 포인터에 대한 얘기를 시작에 대한 게시물의 일련의 이러한 시도는, 참조가 오늘 토론을 계속.
참조 개체 별칭에 대한 별칭입니다. 게다가,이 날 아니지만, 매우 비얀 스트로브 스트 룹, 자신의 책을 가진 콘텐츠의 주제 5.5 근처 그래서 나는 이제 커버 C의 형태로 침입 파도가 통지를 좋아했습니다 그 커버처럼!
참조 선언
참조 타입의 이름 뒤에 특정 유형의 캐릭터 & (앰퍼샌드이나 앰퍼샌드 추가하여 선언됩니다 참조). 같은 방법으로 포인터의 선언으로서, 우리가 치료 참고 & 캐릭터 기관이 아닌 사업자로. 저기 포인터 또는 참조 연산자를 선언합니다. 그것은 단지 언어의 표기법은. 타입 T는 감안하면, 표현식 참고 T는 & T는 것을 의미합니다. 예를 들면 :
/ / 정수 변수를 원래의 선언합니다. / / 그것은 또한, 플로 우트 등 숯불 수있습니다. int 난; 전 변수에 / /를 선언 참조 / / 모든 형태의, 상응하지만 선호하는 첫 번째. / / 참고 : 참조 유형이 동일해야합니다 / / 변수를 참조했습니다. ra = i ; int & 가시우 = 난; rb = i ; int & rb = 난; rc = i ; int & rc = 난; 포인터 / /와 달리, 다음과 같은 라인을 생성합니다 / / 컴파일 오류입니다. 이유를 말할 수 있을까? r1, & r2 ; int & r1, & R2는;
반면에 C + +를 참조 몇 가지만 기억, 그들은 매우 다릅니다. 어떤 포인터와 달리 일이 레퍼런스는 선언에서 초기화되어야합니다. 그것은 컴파일 시에 오류가 발생 초기화하지 않고 레퍼런스 선언하는 노력, 즉, 컴파일러는 당신의 얼굴이 "플레이보이 손실에 침을 의지를 잃었다고!". 그들은 프로그램의 다른 지점에서 초기화 될 것입니다,하지만 다른 호언 장담은이 규칙의 유일한 예외는 참조를위한 것입니다로 통근, 선언.
만약 당신이 불평하지 않습니다 컴파일러가 그것을 초기화하지 않고 통근 참조 선언에 의해 속이려고 하지마. 만약, 확인을 사용한 적이있습니다. 만약 컴파일러가 똑똑 그것, 당신도 기호의 목록에서 제거할 수있는 사용되지 않습니다 지적했다. 그러나 만약 그것이 프로그램의 어떤 부분에서 사용되는 링커 얼굴 "을 'nome_da_variavel'정의되지 않은 레퍼런스 웃고 웃을 것입니다. 그래서 잘 가지 않습니다. 참조 명시된 바와 같이? 그럼 iniclalize. 통근자? 네가 무슨 일을하는지 알고 있습니까?
이 일의 배후 논리를 참조 뭔가 이름이 되야한다는됩니다. 만약 당신이 부팅하지 않으면, 아무것도, 그리고 나서 그것을 이해하게 이름이되지 않습니다. 하나는 매우 중요한 세부 사항 참조를 초기화하는 것입니다 그것에 값을 할당하지 않습니다. 마찬가지로 prório 비얀다고, 아니 연산자는 용어, 즉 어서, 거기에 할당하는 방법은,,, 등 참조와 빼기를 추가 운영하고있습니다. 마찬가지로 개체를 참조 별칭입니다, 각 연산자는 행위를 nese 객체가 아닌 참조. 일단, 레퍼런스는 항상 참조가 같은 개체 초기화되지 않았습니다.
참고로 첫 번째 함정뿐만 아니라 포인터 크기의 문제입니다. 그러나 포인터 (및 기타 데이터 구조)의 크기를 기존의 기술에 의해 얻을 수없습니다 sizeof 연산자, 참조의 크기 때 참조에 sizeof 연산자를 적용한 이후로 얻을 수있다, 우리는 사실입니다 우리가 이전 단락에서 본, 그 참조 연산자는 개체를 신청하셔야합니다.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 숯불 C; int 난; 더블 D 조; rc = c ; 숯불 & C가 rc; ri = i ; int & 리 = 난; rd = d ; 킹 & = d 개의 층; / / sizeof 연산자는 인자의 타입의 크기가있다. "Size of char: " << sizeof ( c ) << " bytes" << endl ; 법원은 "숯불의" "크기 :" ""sizeof (C) "" "바이트" ""endl; "Size of int: " << sizeof ( i ) << " bytes" << endl ; 법원은 "이 Int" "크기 :" ""sizeof는 (i) "" "" ""endl 바이트; "Size of double: " << sizeof ( d ) << " bytes" << endl ; 법원은 "더블" "크기 :" ""sizeof (d)에 "" "바이트" ""endl; endl ; 법원 ""endl; "Size of char&: " << sizeof ( rc ) << " bytes" << endl ; 법원은 "숯불 & 중" "크기 :" ""sizeof (rc) "" "바이트" ""endl; "Size of int&: " << sizeof ( ri ) << " bytes" << endl ; 법원은 "int &의" "크기 :" ""sizeof (리) "" "" ""endl 바이트; "Size of double&: " << sizeof ( rd ) << " bytes" << endl ; 법원은 "을" "크기 & :" ""sizeof () 층 번 "" "" ""endl 바이트; |
참조의 크기에 대한 기술이 텍스트의 범위를 벗어난 것이지만 그들의 미래에 대해 얘기하고 싶어요. 지금 들어, 난 그냥 아니, 어디에, 참조의 크기가 포인터의 크기가 동일 적용 보여주라고합니다.
이야기의 좋은 부분은 포인터와 참조의 크기는 종종 훨씬 참조된 또는 지적 개체의 크기보다 관련성이있습니다. 저는 개인적으로 그 정보를 사용하지만, 개발 또는 임베디드 시스템에 대한 서로 다른 아키텍처에 대한, 그것되어 더 흥미 없었어요.
를 사용하여 참조
때문에 통신 사업자 주소 또는 드를 참조 압축을 풀 필요가없습니다 참조를 사용하여 포인터가 지금보다 훨씬 더 간단합니다. 가변 견해를 언급하는 일반적인 변수로서, 그 작업을 참조 항상 개체에 영향을 완료하는 데 사용됩니다 참조된 지적했다.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 | int 엑스, y를; rx = x ; int & rx = x; ry = y ; int & 보시지 = y를; ; x = 13; ; y를 = 10; ; // A atribuição é automaticamente aplicada em x. rx = 42 / / 보너스 X를 자동으로 적용됩니다 // O incremento é automaticamente aplicado em y. 공예 + + / / 증가 y를 자동으로 적용됩니다 "x: " << x << endl ; // Valor de x. 법원 "" "x :" ""x ""endl; X의 / / 값을 "y: " << y << endl ; // Valor de y. 법원 "" "y를 :" ""y를 ""endl; 샀다고의 / / 값을 "rx: " << rx << endl ; // Valor de rx == x. 법원 "" "rx :" ""rx ""endl; / / 값을 == 엑스 rx "ry: " << ry << endl ; // Valor de ry == y. 법원 "" "공예 :" ""공예 ""endl; / / 값 스피 == 샀다고 |
참조를 사용하는 프로그래머에게 투명하게, 그 참조를 알아야하지 않았다. 단순히 일반 변수처럼 사용할 수있습니다. 내 제한된 상상력이 얼마나 사람이 부적 절한 용어를 사용하여 추방 당할 수있습니다 볼 수없습니다. 하지만 항상 그 똥 참조와 함께 할 수있는 돼지의 어떤 정신을 가지고 많은 Saci하여 포인터를 처리하는 최대 틀어서 좀 더 쉽습니다.
주소 및 참고 문헌
머피의 관점에서, 참조, 지루한 못생긴하고 바보 같은, 때문에 그들과 함께 거기에 약간의 할 잠재적인 위험이다. 심지어 주소로 이미 많은 놀라움을합니다 (것인가?). 아래의 코드를 고려해야합니다 :
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 10 ; int = 10; 13 ; int b = 13; ra = a ; int & 가시우 =; rb = b ; int & rb = b; ; 가시우 = 42; ; rb = 7; "ra = " << ra << endl ; // O valor de ra == 42. 법원 "" "가시우 =" ""있겠나 ""endl; / / 가시우 == 42의 값. "rb = " << rb << endl ; // O valor de rb == 7. 법원 "" "r에 =" ""rb ""endl; / / rb == 7의 값. "a = " << a << endl ; // O valor de a == ra == 42. 법원 "" "=" "" ""endl; / / 가시우 == == 42의 값. "b = " << b << endl ; // O valor de b == rb == 7. 법원 ""의 "B =" ""b ""endl; / / b == == rb 7의 값. "&a = " << & a << endl ; // O endereço de a. 법원 "" "& =" ""& ""endl; 그러니까, / / 주소 "&b = " << & b << endl ; // O endereço de b. 법원 "" "식사와 침대 =" ""식사와 침대 ""endl; B의 / / 주소 "&ra = " << & ra << endl ; // O endereço de ra == &a. 법원 "" "& 가시우 =" ""있겠나 ""endl; / / 종족의 주소 == & 대답 "&rb = " << & rb << endl ; // O endereço de rb == &b. 법원 "" "& rb =" ""rb ""endl; / / rb의 주소 == & B에 |
라인 17과 18 두 정수 변수를 선언합니다 (하나의 예를 들어 ...).이 할 수 라인 20 일과 21 일 두 참조 선언 이전의 두 변수를 참조합니다. 그러므로 변수 종족과 rb 변수에 대한 별칭입니다 단지와 B. 위에서 언급한 바와 같이, 어떤 연산자를 참조 실제로 참조된 개체에서 작동하므로 각 쌍의 변수 참조를 항상 같은 값이 적용됩니다.
참고로 흥미로운 것은 참조의 주소를 정확하게 그들이 참조 변수의 동일한 주소입니다 자신의 주소 포인터를 달리했다. 왜? 왜냐면 당신 Pegadinha 떨어졌다 Malandro 않습니다. 모든 연산자의 얘기를 기억 레퍼런스에 적용하려면? 음, 여기에 & 연산자를 "주소", 또한 직접적으로 원래 변수에 대한 참조에없는 사용에 적용됩니다. 동일한 기술을 사용하는 닌자 참조의 크기를 그들의 주소를 구하는 방법이 필요합니다.
다시 재미있는 부분 참조 메커니즘 프로그래머 최대한 투명하게하도록 설계된 것입니다. 크기 및 참고 자료의 '보기'정상의 지점에서 수있습니다 무관한 내용은 C 프로그램의 물리 주소 + +.
차이와 포인터 그리고 참조 사이의 유사성
두 포인터 및 참조 C에서 우회의 메커니즘을 +하는 +, 또는 메커니즘에 특정 기호가 다른 개체를 조작할 수있을 것입니다 (변수)에서 사용됩니다.
포인터에 대한 기본 사용은 일반적으로 관리 및 동적 메모리, 생성 및 객체 및 특별 행사에 대한 형태의 파괴의 조작을 위해,뿐만 아니라 "참조에 의해 매개 변수를 전달"(그래서) 인용 관련이있습니다. 이후 참조를 추가 참조에 의해 전달하는 데 사용됩니다 (왜입니까?) AND 연산자 오버.
기본적으로, 우리의 모든 참조 포인터와 함께있을 수있는 에뮬레이션 할 수있습니다. 다른 한편 상호 항상 사실이 아니다. 그들의 가장 큰 장점은, 그러나, 완전히 우회 프로그래머에게 투명하게됩니다.
재미있는 우화를 더 포인터와 참조의 차이점 이해하는 데 도움 별명이다. 예를 들면 : 사람, 둥가, 우리가 원래 변수. 둥가 둥가에 이미 참조가 개체입니다다고 상상해보세요, 그것은 동일한 개체에 대한 별칭입니다 같은 사람입니다. 이미 둥가의 어머니 (또는 둥가, 뭐든간에), 어떤 손을 팬들에 의해 꾸준히 인용 있기 때문에 데이터의 일부 공급자 어휘, 그것, 그녀에게 경의를 만든 사실을 간접적으로 대상으로 포인터로 간주될 수있습니다 그를.
링크
- referencias.zip (게시물의 모든 소스);
- 01 - declaracao.cpp
- 02 - tamanhos.cpp
- 03 - utilizando.cpp
- 04 - enderecos.cpp
- 길티
댓글
5 답변은 "포인터와 참조는 C + + 파트 2"
답글 남겨주세요



멋진 문서!
불행히도 그들은 보이는대로 해가 아니라 참조입니다. 다음과 같은 상황을 상상해보십시오 :
1. 누군가가 로컬 변수가 아닌 정적에 대한 참조를 반환합니다 :
이 경우에는 범위도 전에 누군가가 참조를 사용하여 끝납니다.
솔루션을 매개 변수로 참조를 가져오기 위해 오직 하나의 복사본을 만들고있습니다 : 변수 "에 대한"아웃.
2. 누군가가 일반 변수를 동적 메모리를 사용하여 원하는 :
그들이 보이는 이러한 예제하지만 희한하지 짐승을 보인다. 그냥 코드가 디자인 패턴이나 어떤 다른 말도 소각하고 무슨 일이 있었는지 모르게 터져.
[]이야
Caloni, 당신은 사람을 너무 서두르는거야
네, 그렇군요. 하지만 난 그것을 목적에 가자.
나도 아직은 포인터 또는 참조, 또는 포인터와 배열 간의 연관 const 심지어는 얘기를하지 않은,하지만 난 말할 것입니다.
칭찬해 주셔서 감사합니다, 그것은 매우 동기를 부여합니다.
Abração
때문에 작은 그들과 함께 할 잠재적인 위험이있습니다 내 naivete, 그 때 난 당신이 "머피의 관점에서 고 말했다 종료 부여했다, 참조, 지루한 못생긴하고 바보 같은 생각 했어요."어떠한 있음 때문에 실제로는 아주 잘하는 자들 C와 C 간의 차이점에 대한 탐험하는 방법에 대한 설명은 이미 초보자에게 귀하의 문서를 권장 + +.
난 절차를 기다리고있습니다.
[]이야
파트너 공포!
축하 아주 좋은 기사입니다!
[]이야
[...] [...] Pointeiros 및 참조