2013년 8월 8일 목요일

C, C++의 연산자 * 와 & 의 기능에 관하여

C, C++에서 * 와 & 의 사용법은 매우 다양하지만 이를 한데 몰아서 간단하게나마 적으려 한다.

--------------------

[1] * 의 기능

첫 번째로 * 가 두 개의 변수, 혹은 상수 사이에 위치하게 되면 알다시피 곱하기 기능을 한다.

c = a * b;       // a 와 b 를 곱하여 c에 넣으라는 뜻이다.

아래를 보자.
int x=8;
int y=9;
int z;
int w;
z = x * y;     // z에는 72가 들어간다.
w = z * 3;     // w에는 216이 들어간다.

두 번째로 * 가 선언문에서 변수 타입 뒤에 붙으면 "포인터형 변수"를 선언한다는 뜻이 된다.

int* x;   // x 라는 정수형 포인터를 선언함.
int *x;   // 동일함.
int * x;  // 동일함.

세 번째로 * 가 일반적인 구문에 오면서 두 개의 변수, 혹은 상수 사이에 위치하지 않는다면 이는 "역참조"를 뜻한다. 즉 포인터형 변수가 가리키는 메모리 주소에 저장되어 있는 내용을 이야기한다는 뜻이다.
int i = 3;    // 정수형 변수 i 를 선언하고 3으로 초기화한다.
int *j = &i;  // 정수 포인터형 변수 j 를 선언하고 i의 주소값을 넣는다.
*j = 4;       // j의 역참조값에 4를 넣는다. 즉 여기서 i는 4가 된다.


[2] & 의 기능

첫 번째로 & 가 두 개의 변수, 혹은 상수 사이에 위치하게 되면 알다시피 비트연산(AND) 기능을 한다.

int a = 3 & 4;   // a 에는 0이 들어간다.
int b = 6 & 10;  // b 에는 2가 들어간다.

왜 결과가 저렇게 되는지는 생략....

두 번째로 & 가 선언문에서 변수 타입 뒤에 붙으면 "별명"을 선언한다는 뜻이다(참조자). 그런데 이것은 C++에서만 가능하며 C언어에서는 불가능하다.

int a;
int &b = a;
b = 3;

여기서 b 는 a 의 별명이다(aliasing). 따라서 위의 코드에서 a에는 3이 들어간다. 쉽게 말하면 철수에게 "꼬맹이"라는 별명을 붙이면 꼬맹아! 라고 부를 때 철수가 돌아보는 것과 같은 이치...

세 번째로 & 는 변수의 메모리 주소값을 이야기한다.

이것도 설명은 생략...

~~~~~

이를 보아도 C, C++ 라는 언어는 정말로 자유도가 높은 언어임을 알 수 있겠다.
그런 만큼 사용하는 데에 주의를 요한다.

댓글 2개: