프로그래밍 언어 활용 part 1 - 포인터 기초
포인터
[학습내용] | [학습목표] |
▪ 포인터 이해 ▪ 포인터 이용 |
▪ 포인터의 개념에 대해 설명할 수 있다. ▪ 포인터 변수를 이용하여 데이터 변수값을 참조할 수 있다. |
포인터 이해
1. 포인터 개념
포인터 특정 위치를 가리키는 주소 정보
포인터 변수 포인터(주소)를 저장하는 변수
▪ 포인터 변수의 크기(주소의 크기)는 일반적으로 4바이트이지만 시스템에 따라 다름
▪ 포인터 변수의 역할은 다른 변수를 가리키는 변수
2. 포인터 변수
▪ 포인터 변수의 데이터 타입은 포인팅하는 변수의 데이터 타입과 동일한 타입으로 선언
char* | int* | double* |
char형 변수의 주소 저장 |
int형 변수의 주소 저장 |
double형 변수의 주소저장 |
sizeof() 연산자 int sizeof(int) : 매개변수에 기술한 공간의 크기를 정수값으로 반환함
int a;
char b;
double c;
int *pa;
char *pb;
double *pc;
sizeof(a);
sizeof(b);
sizeof( c );
sizeof(pa);
sizeof(pb);
sizeof(pc);
3. 포인터 초기화
▪ & 주소 구하기 연산자
▪ & 데이터 변수 변수의 주소를 의미
▪ * 포인터 변수 포인터 변수가 가리키는 주소의 값
포인터 이용
1. 포인터 다루기
#include <stdio.h>
int main()
{
int a=9;
int *pa = &a;
printf(“변수 a의 값은 %d 이고 a의 주소는 %p 이다.”, a, &a);
printf(“포인터 변수 pa의 값은 %p 이고 pa가 가리키는 곳의 값은 %d 이다”, pa,*pa );
return 0;
}
#include <stdio.h>
int main()
{
int a=9;
int *pa = &a;
printf(“변수 a의 값은 %d 이고 a의 주소는 %p 이다.”, a, &a);
printf(“포인터 변수 pa의 값은 %p 이고 pa가 가리키는 곳의 값은 %d 이다”, pa,*pa );
*pa = 12;
printf( “a=%d”, a);
return 0;
}
#include <stdio.h>
int main()
{
int a,b=4;
char ch=‘k’ ; char *pch=&ch;
int *pa = &a; *pa=7;
printf(“a=%d *pa = %d \n”, a, *pa);
printf(“ch=%c *pch = %c \n”, ch, *pch);
pa = &b;
printf(“b=%d \n”, b);
*pa = 15;
printf(“b=%d \n”, b);
return 0;
}
2. 이중 포인터
▪ 포인터 변수의 주소를 저장하는 포인터 변수
int x;
int *p = &x;
Int **pp = &p; //pp는 이중 포인터
▪ 이중 포인터가 가리키는 포인터를 이용해서 변수에 접근하려면 **처럼 두 번 간접 참조를 해야 함
**pp = 10; //*pp는 p가 되므로, 다시 p가 가리키는 x에 접근하려면 *가 하나 더 필요
3. 포인터 오류
• 포인터도 변수이므로 반드시 초기화 해야 함
• 포인터 변수를 초기화하지 않고 사용하면 실행 에러가 발생함
int *p; //p는 초기화되지 않았으므로 쓰레기 값을 가짐
*p = 10; //실행 에러가 발생함
• 널포인터 : 포인터가다른변수를가리키지않을때는NULL(0)로초기화함
int *p = NULL; //p를 널 포인터로 초기화함 p는 아직 다른 변수를 가리키지 않음
• 포인터를 안전하게 사용하려면 우선 포인터가 널포인터 인지를 검사
if( p ! = NULL ) //p가 널 포인터가 아닌지 확인 후에 사용
*p = 10;
if( p ) //p가 널 포인터가 아닌지 확인
*p = 10;
• 포인터 변수의 데이터형이 반드시 포인터 변수가 가리키는 변수의 데이터형과 일치해야 함
short a;
int *p = &a; //컴파일 경고가 발생
*p = 10; //컴파일경고를무시하고실행하면, 실행에러가발생
학습정리
1. 포인터 이해
▪ 포인터 : 다른 변수의 주소를 저장하는 변수
▪ 포인터의 선언 : 데이터형*변수명이 필요함 예) int * p;
▪ 포인터의 사용 : 변수의 주소를 구할 때는 주소 구하기 연산자 &를 이용하고, 포인터가 가리키는 변수에 접근할 때는
간접 참조 연산자 *를 이용함 예) int *p = &x; *p = 10;
2. 포인터 이용
▪ 포인터 사용 시 주의사항
- 포인터 변수는 포인터가 가리키는 변수의 데이터형과 일치하도록 선언해야 함
- 잘못된 포인터를 사용하는 것은 위험하므로, 포인터가 가리키는 변수가 없을 때는 NULL을 저장함