오늘은 몇몇의 연산자를 알아보고자 합니다.
우선 첫번째! '&'
엔퍼센트... 주소 연산자입니다.
주소라... 메모리에 대해 지난 글을 보셨으리라 생각하며
바로 들어가보도록 하겠습니다.
char c = 10;
int n = 10;
한번 해석해보세요! 3초 드립니다. 하나 둘 셋!
제가 말씀드리자면,
C라는 이름을 가지고 10이라는 값을 가진 변수를 선언했네요.
근데 데이터 타입은 char 형인것으로 보아 1 Byte이군요... 따라서 주소를 하나 갖겠네요.
(1 Byte 당 주소 하나!)
그 아래 친구는 4 Byte 짜리 int형 변수군요... 주소를 4개 갖겠어요.
음 아무튼 그것은 그렇고 그럼 &은 뭘 의미하는 것일까요...
바로 변수의 주소를 의미하는 것입니다.
/*
변수 어떻게 생긴 줄 아시죠? 한번 그려볼까요?
나-중에 그릴께요... 지금은 한번 스스로 정리해보는 입장이라서...
*/
음... 참고로
데이터의 단위는 메모리가 연속되게 할당되기 때문에 시작 주소만 알면 됩니다.
그리고... 너무 당연한 말이지만, 변수가 두개라면 메모리 공간도 두개겠죠.
하지만 그 두개의 메모리 공간이 연속적이지 않다는 점~
정리해보자면,
&은 주소 연산자. 즉 변수의 주소를 알 수 있다.
또한 변수의 주소는 연속적으로 할당되기 때문에 시작주소만 알면 된다.
따라서 & 주소 연산자를 사용하면 변수의 시작 주소를 알 수 있겠군요.
변수 앞에 &을 붙이면 주소가 된다고 했습니다.
그런데 말입니다...
주소 앞에는 *를 붙일 수 있습니다. 붙이면 어떻게 되느냐...
바로 메모리 이름이 됩니다.
예를 들어보겠습니다.
n이라는 변수의 값은 10이라고 가정해보고,
&n 즉, n의 주소값은 6000 이라고 가정해보겠습니다.
그렇다면 *&n 는 뭘까요? n이 됩니다. 즉 10이 출력되겠죠.
종합적으로
&변수 = 주소, *주소 = 변수 이렇게 된다는 것입니다!
(다시한번 기억하자. 변수는 변경가능한 메모리 공간의 이름!)
그런데요 *&n 어차피 이렇게 쓰지도 않습니다.
그냥 단지 * 에대한 의미를 좀 확실히 와닿게 하고자... 하하...
아... 그리고 주소는 상수만을 입력받기 때문에
변수는 입력 못받습니다.
즉 &n = 100; 이런것은 허용이 되지 않습니다.
그렇다면, 다음으로 [] 그러니까 대괄호에 대해서 알아보도록 하죠.
대괄호는 * 와 연관성이 있습니다. 같은 종류의 연산자라고 보시면 되죠...
주소는 값을 저장하는 위치입니다. 주소 앞에는 * 를 붙일 수 있다고 했었고요...
*를 붙이게 된다면? 주소의 메모리 이름이 되니깐요.
(지겹도록 반복학습 촥촥)
그런데 말입니다... 주소가 있는데 주소 뒤에 대괄호([])를 붙일 수 있습니다.
이 뜻은 뭐냐 하면 주소로부터 정수(index)를 넣을 수 있는데,
주소로부터 넣은 정수값번째 메모리를 뜻하게 됩니다.
뭔말이냐 하면... 또 예시 들어갑니다!
우리가 알고 있는 것이 주소 밖에 없다고 생각해보겠습니다.
주소 이름이 p라고 해보죠. 데이터 타입은 int로 칩시다.
변수의 이름은 그렇다면? *p라고 할 수 있겠죠.
p[0]은 그럼 뭘까요...
p로부터 시작하는 0번째 메모리라고 할 수 있습니다...
왜냐하면... p는 주소라고 했습니다.
그런데 int형이니 4 Byte... 즉 주소를 4개 가지고 있습니다.
첫번째 주소(시작주소)... 아... 그러면 *p와 p[0]이 가리키는 주소가 같겠네요.
그말인 즉! *주소 = 주소[0]이 된다는 뜻!
/*
헷갈리신다면... 조금만 기다려주세요... 주말에 폭풍 사진 업뎃을...
*/
'삽질의 현장 > - C' 카테고리의 다른 글
곱씹어보자 C!_#008_ 삽잡이의 두서없이 막말하는 C언어의 꽃! 포인터 (0) | 2015.06.23 |
---|---|
곱씹어보자 C!_#007_ 삽잡이의 두서없이 막말하는 제어문 반복문 (0) | 2015.06.23 |
곱씹어보자 C!_#005_ 삽잡이의 두서없이 막말하는 메모리와 데이터 (0) | 2015.06.23 |
곱씹어보자 C!_#004_ 삽잡이의 두서없이 막말하는 데이터 타입의 등장 (0) | 2015.06.23 |
곱씹어보자 C!_#003_ 삽잡이의 두서없이 막말하는 프로세스! (0) | 2015.06.23 |