Blog/JAVA기반 스마트웹 개발2021

프로그래밍 언어 활용 part 1 - 포인터 기초

고구마달랭이 2021. 7. 29. 20:16

포인터

[학습내용] [학습목표]
▪ 포인터 이해
▪ 포인터 이용
▪ 포인터의 개념에 대해 설명할 수 있다.
▪ 포인터 변수를 이용하여 데이터 변수값을 참조할 수 있다.

포인터 이해

 

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을 저장함