포털:고등학교/정보·통신 계열 전문 교과(2015)/프로그래밍/포인터

위키배움터

1. 포인터란[편집]

변수에 값이 아니라 메모리의 주소를 가지고 있는 변수, 건물의 주소와 유사함, 컴퓨터 메모리도 주소를 가지고 있음.
포인터를 사용하기 위해서는 포인터를 선언해야 함.
선언할 때는 포인터 연산자(*) 사용 – 곱셈과 혼동 주의
포인터 선언
포인터 변수가 가리키는 값의 자료형 포인터 연산자 선언할 포인터의 이름
int * p;
예를 들어, 변수 a에 5를 넣어 초기화 한 후 포인터 변수 pt에 변수 a의 주소를 알려 주면 pt는 5가 있는 위치를 가리킨다.
배열과 포인터는 밀접한 관계로 배열도 일종의 포인터, 다만 배열은 포인터 상수
따라서, 배열에는 주소를 대입(변경)할 수 없음


#include <stdio.h>
 int main(void){ 
   int a[ ] = { 1, 2, 3, 4 }; 
   printf("*a = %u \n", *a); → 포인터 a가 가리키고 있는 변수의 값
   printf("*(a+1) = %u \n", *(a+1)); 
   printf("*(a+2) = %u \n", *(a+2)); 
   return 0;
 }


2. 포인터를 함수의 매개 변수로 사용하자[편집]

함수의 매개 변수로 값을 전달할 때는 값 자체를 전달(call by value) 하는 방식과 주소(call by reference)를 전달하는 방식이 있음
함수의 매개 변수로 포인터를 사용하면 값이 저장되어 있는 주소를 전달할 수 있음
#include <stdio.h>
 void swap(int *a, int *b);
 int main(void){
   int a, b;
   a = 5;
   b = 7;
   printf("함수 호출 전 : a = %d, b = %d \n", a, b);
   swap(&a, &b);
   printf("함수 호출 후 : a = %d, b = %d \n", a, b);
   return 0;
}
 void swap (int *a, int *b){
   int temp;
   temp = *a;
   *a = *b;
   *b = temp;
}

3. 포인터로 문자열을 처리하는 방법을 알아보자[편집]

C 언어에서 긴 문자열을 처리할 때, 배열 또는 포인터를 이용함
포인터는 배열과 달리 ‘=‘ 연산자로 내용 전체를 바꿀 수 있음
포인터를 이용해서 여러 개의 문자열을 저장하려면 포인터 배열을 이용하면 된다. 이 방법은 한 번 입력 후 바뀌지 않는 문자열을 저장할 때 사용한다.
#include <stdio.h>
 int main(void){ 
   char *lang[3] = { "C", "JAVA", "PYTHON" };  → 포인터 배열 사용
   int a; 
   printf("여러분이 배워야 할 언어는"); 
   for (a = 0; a < 3; a++) 
     printf(" %s ", lang[a]); 
   return 0;
}

4. 문자열 입출력 함수를 사용해보자[편집]

gets() – 공백이 있는 문자열 입력
puts() – 한 줄의 문자열 출력


문자열 입출력 함수
입출력 함수 설명
char *gets(char *s) 한 줄의 문자열을 읽어서 문자 배열 s[ ]에 저장한다.
int puts(const char *s) 배열 s[ ]에 저장되어 있는 한 줄의 문자열을 출력한다.
#include <stdio.h>
 int main(void){
   char address[100];
   char *addpt;
   printf("주소 입력: ");
   gets(address);
   addpt = address;
   printf("입력한 주소는: ");
   puts(addpt);
   return 0;
}