본문 바로가기
코스웨어/10년 스마트폰BSP

[BSP]업무일지-서유해-20100608

by 알 수 없는 사용자 2010. 6. 8.
728x90
반응형

C++

C++ 레퍼런스란?

C++ 레퍼런스는 변수명을 갖고있는 메모리 주소에 또 하나의 변수명을 지어주는 것과 같다. 즉 변수명에 별명을 붙여주는 것이다.


포인터와 레퍼런스의 차이

포인터 - 메모리 주소값만을 저장할 수 있는 변수

레퍼런스 - 변수명에 별명을 붙여주는 것

위의 그림은 포인터로서 int i의 주소값을 포인터 변수 pi가 가지고 있는 것이다. 즉 포인터를 사용할 경우에는 변수가 2개 선언된다.



레퍼런스는 변수가 원래 하나인데 거기에 별명을 지어주는 것이라고 볼 수 있다.

이러한 레퍼런스의 장점은 일단 포인터를 사용하지 않고도 메모리 주소를 가질 수 있다는 점이 유용하다.

단점으로는 주소값을 넘겨줄 경우 &(ampersand)를 붙여주지 않으므로 인자값의 오해를 불러올 수 있다.


 임베디드시스템 C

배열이란?

배열은 의미상의 연관이 있는 다수의 데이터를 사용자가 묶어서 하나의 자료형으로 정의한 것으로 쉽게 말해서 같은 자료형들 끼리의 연속적인 묶음이라 할 수 있다.



배열원소의 참조



배열을 선언한 후 배열의 각 원소에 값을 저장하려면 첨자를 이용하여 각 원소에 값을 대입한다. 배열 첨자는 유효한 값의 범위를 벗어나는 경우 오류가 발생할 수 있으므로 항상 배열 첨자의 사용에 주의해야 한다.


배열 원소의 값을 한번에 출력하는 방법은 달리 제공되지 않으므로 원소를 계속 출력하거나 입력하는 방법은 주로 for문을 이용한다.

또한 중괄호를 이용하여 배열을 초기화 하는 벙법도 있다.

ex) int score[4] = {10, 30, 40, 50};

배열에서의 포인터 이용

위에서도 설명했지만  score는 배열의 첫 원소인 score[0]의 주소값을 나타내며 배열을 대표한다. 이 주소값은 절대 바뀔 수 없다.

score == &score[0]// score는 배열의 첫 번째 원소의 주소값


주소 상수 score에 *연산자를 이용한 *score는 바로 score[0]과 같다.

*score == score[0]

여기서 score도 포인터이므로 간단한 연산식 (score + 1)이 가능하며, 주소값 score 의 다음 배열 원소의 주소값을 의미한다.



주소값(score + 1)은 실제의 주소값으로 살펴보면 score의 실제 주소값에 int 형의 크기만큼 더한 주소값을 갖는다.

배열 이름인 score와 * 연산자를 적절히 이용하면 다음과 같이 출력된다.

*score == score[0]

*(score + 1) == score[1]

*(score + 2) == score[2]


728x90