알버트의 개발하는 블로그
C 언어 / C++ 언어 제17강 포인터 개념 익히기 (주소값 저장하는 변수 포인터) 본문
이번 시간에는 C언어에서 많이 쓰이고 있는 포인터에 대해서 배워보겠습니다.
우리가 변수를 선언했을 때, 이 변수는 컴퓨터의 메모리에서 어떤 공간을 차지하게 됩니다. 그리고 이 공간이 어디에 있는지를 알려주는 것이 바로 포인터라고 생각하시면 됩니다.
포인터란?
포인터란 변수나 배열이 메모리에 생성된 주소를 말합니다. 그리고 포인터 변수는 값(상수)을 기억하지 않고 포인터를 기억합니다. 컴파일러에게 포인터 변수임을 알려주기 위해 변수명의 앞에 '*'을 붙여야 합니다.
포인터 변수 선언시 붙여주는 자료형은 포인터 변수에 저장할 변수나 배열의 자료형을 따라서 적어주면 됩니다.
그리고 또 한가지 흥미로운 점은, 선언시 붙여주는 자료형에 상관없이 포인터 변수는 무조건 4바이트의 크기를 가진다는 것입니다.
이제 간단한 예제를 통해 포인터를 익혀보겠습니다.
포인터 예제
대표사진 삭제
사진 설명을 입력하세요.
변수 a를 선언하고 100이란 값을 넣어주었습니다. 그리고 포인터 변수 p를 선언해주었습니다. 근데, 포인터변수 p에 초기화를 안해주었기 때문에 안에는 쓰레기값이 들어있습니다. 그래서 p = &a;를 써주었는데 이것은 변수a의 주소를 p에 저장한다는 뜻입니다.
제가 밑에 그림으로 허접하게 그려놨는데요. 변수 a라는 박스 안에 100이란 값이 들어있습니다. 그리고 a의 주소를 임의대로 34번지라고 하겠습니다. 이 34번지라는 주소값을 포인터 변수 p에 넣어준 것입니다.
자 그럼, printf문을 보시면 포인터 변수가 어떻게 적용되는지 알 수 있습니다.
첫번째 printf문은 a를 출력하는 것이므로 그대로 a가 출력될 것입니다.
두번째 printf문은 a 앞에 &을 붙였으므로 주소값을 가져오는 연산입니다. 따라서 a의 주소값이 출력될 것입니다.
세번째 printf문은 포인터변수 p를 출력하는 것인데 p에는 &a를 넣었으므로 똑같이 a의 주소값이 출력됩니다.
네번째 printf문을 좀 유의하셔야 합니다. *p를 출력하라고 되어있습니다. 근데 여기서 '*'의 의미는 위에서 선언한 '*'의 의미와는 좀 다릅니다. 여기서 '*'은 포인터 변수 p의 값을 참조하라는 의미입니다. 즉, 포인터 변수 p에 들어가 있는 주소를 찾아서 값을 가져오라는 겁니다..그렇다면 34번지에 저장되어있는 100이 출력이 될 것입니다.
대표사진 삭제
사진 설명을 입력하세요.
이처럼 변수 a의 값은 100, 메모리가 저장되어있는 주소가 두줄 그대로 출력이 됩니다.
그리고 마지막으로 포인터변수 p가 참조하는 값인 100이 출력된 것을 알 수 있습니다.
포인터라는 개념을 처음 배우게 되면 '*' 이 기호때문에 많이들 헷갈리시는데요. '*'를 참조연산자라고도 합니다.
읽어주셔서 감사합니다.
'프로그래밍 언어 > C & C++' 카테고리의 다른 글
C 언어 / C++ 언어 제19강 메모리 동적 할당 이용하여 숫자 입력받고 평균 구하기 (0) | 2021.04.30 |
---|---|
C 언어 / C++ 언어 제18강 구조체(struct)와 구조체 변수 (0) | 2021.04.30 |
C 언어 / C++ 언어 제16강 메모리 동적 할당으로 이차원 배열 만들기 (0) | 2021.04.29 |
C 언어 / C++ 언어 제15강 자연수를 입력받아 약수 찾기 (for 반복문, 연산자) (0) | 2021.04.29 |
C 언어 / C++ 언어 제14강 이차원 배열 ( 반복문 활용하여 이차원 배열 출력하기 ) (0) | 2021.04.29 |