2010-12-06 3 views
0

가능한 중복 : 나는 다른 일이 간단한 코드를 보았다
Difference between pointer variable and reference variable in C++C++ 참조/포인터

, 내가 년 정도가 있지만, 나는 나 자신 포인터 초보자 고려 C++의 절반 경험. 여하튼 ...

int a = 0; 
int &b = a; 

분명히
int a = 0 
int *p = &a; 

차이점은, p는 (A)의 어드레스를 보유하고 있지만, B는 I 값을 변경할 수 있음을 의미하는 참조 뭐죠

의 a와 b. 그러나 나는 또한 p로 같은 일을 할 수있다. 장점이나 단점은 무엇입니까?

답변

2
  • 참조는 항상
  • 이 참조가 null 일 수 없습니다 초기화해야합니다
  • 일단 참조가 다른 개체의 별칭으로 변경할 수 없습니다 초기화.
+0

참조는 null 일 수 있습니다. int * a = 0; int & b = * a; –

+1

이렇게하면 참조가 잘못된 개체를 참조 할 수도 있습니다. 하지만 int & b = NULL과 같은 것은 초기화 할 수 없습니다. –

+1

@Benoit : 참조는 null 일 수 없습니다. 8.3.2/4 : "참조는 유효한 객체 나 기능을 참조하도록 초기화되어야한다. [...] 널 참조가 잘 정의 된 프로그램에는 존재할 수 없다" –

0

나중에 프로그램에서 변수를 어떻게 사용할 것인지 생각해 봅니다. 두 진술 모두 같은 일을하는 것으로 보입니다 (이 제한된 범위 내에서).

첫 번째 접근법은 나중의 프로그래밍 실천으로 보입니다. 나중에 프로그램에서 b 값을 변경하면 a 값이 변경된다는 것이 분명하지 않을 수 있습니다. 두 번째로 적어도 p는 포인터라는 것이 알려져 있으므로 포인터가 가리키는 값을 변경하는 부작용을 예상해야합니다.