--------------------
[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++ 라는 언어는 정말로 자유도가 높은 언어임을 알 수 있겠다.
그런 만큼 사용하는 데에 주의를 요한다.
뀨
답글삭제잘봣다
답글삭제