포털:고등학교/정보·통신 계열 전문 교과(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; }