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