안녕하세요.
오늘은 C언어 포인터에대해 알아보겠습니다.
C언어의 포인터란 값을 저장하는 것이 아니라 주소를 저장하는 것이라고 보시면 됩니다.
즉 주소를 저장한다는 것은 컴퓨터 메모리상의 주소를 의미합니다. 선언방법은 아래와 같습니다.
int *a;
위와같이 변수이름 앞에 *을 붙여 주면 포인터형 변수 선언이 됩니다. *의 느낌이 중요합니다.
일반변수 int a; 와 변수 int *a; 는 앞의 *첨두자에 따라 달라집니다.
이 *첨두자가 붙음으로써 어떤 검침자 같은 느낌이라고 느꼇다면 제대로 느낀 것입니다.
변수를 저장하는 일반적인 것이 아닌 변수 메모리상의 주소를 지정해주는 검침자 같은 것이 됩니다.
기본적인 사용법은 아래와 같습니다.
예제코드
int b=1; // 일반변수 선언
int *a ; // 변수의 주소를 저장할 포인터 선언
a = &b; // 변수b의 주소를 포인터 a에 저장
변수의 주소값을 포인터 변수에 저장하기 위해 변수 앞에는 &첨두자를 붙여 줍니다.
printf("%p \n", &b); //변수 b의 주소(&b)를 16진수(%a)로 출력합니다.
결과: 00EFFABC
printf("%p \n", a ); // 포인터 변수 a의 값도 동일합니다.
결과: 00EFFABC
printf("%p \n", *a); //포인터 변수의 주소가 아닌 저장된 값을 확인하기 위해서 *첨두자를 붙여 줍니다.
결과: 00000001
위의 예제코드 처럼 int 형 변수를 선언해서 결과 주소값이 0x00EFFABC에 저장되어 있다면 실제 아래 그림처럼 저장됩니다. int 형 변수는 메모리에서 4byte를 차지 합니다.
물론 double형 포인터,char형 포인터 등은 메모리에서 차지하는 크기가 모두 달라질 것입니다.
- 포인터사용의 이점
1. 메모리에 직접 접근이 가능
2. 구조체등 복잡한 함수에 직접 접근 가능
3. Call by refernce방식 가능
4. 메모리 동적할당 가능
'프로그래밍 > C언어 기초 강좌' 카테고리의 다른 글
C언어 기초강좌9 배열 (2) | 2021.02.06 |
---|---|
C언어 기초강좌8(while) (13) | 2020.12.21 |
C언어 기초강좌7 (for문) (9) | 2020.12.14 |
C언어 기초강좌6 (break, return문) (12) | 2020.12.08 |
C언어 기초 강좌5 (Switch~Case 문) (2) | 2020.12.07 |
댓글