예제 1. 포인터의 개념
-
#include <stdio.h>
-
-
int main()
-
{
-
int i = 10, j = 20, *a; // 정수 변수 i, j, 및 정수 포인터 변수 a선언
-
a = &i; // 정수 포인터 변수 a에 i의 주소 저장
-
a = &j; // 정수 포인터 변수 a에 j의 주소 저장
-
-
// 포인터 변수 a의 주소는 변하지 않는다. a가 가지는 포인터 값만 변하기 된다.
-
}
예제1 실행결과 :
예제2. 정수배열 포인터를 이용하여 덧셈하기
-
#include <stdio.h>
-
-
int main()
-
{
-
int x[10] = {45, 77, 89, 38, 29,
-
58, 93, 84, 73, 66}; // 정수 배열 x선언 및 초기화
-
int sum = 0, i, *x1; // 정수 변수 선언 및 정수 포인터 변수 선언
-
-
x1 = &x[0]; // 정수 포인터 변수 x1에 x[0]의 주소 대입. 또는 x1 = x라고 해도 된다.
-
// 여기서 x는 포인터 상수라 하며, x는 포인터 상수라 하며,
// x1은 포인터 변수라 한다. x는 포인터이긴 하지만 이 포인터 값은 변하지 않는다.
-
// 그러나 x1은 포인터 변수로 선언되었으므로 포인터 값이 변할 수 있다.
-
-
for(i = 0; i<10; i++){ // 배열에 저장된 10개의 데이터를 순서대로 sum에 합한다.
-
// 이때 x1의 값을 증가시킨다.
// x1은 정수 포인터이며 정수포인터는 정수데이터의 저장크기 만큼인
-
// 4씩 자동으로 증가한다.
-
// 우리가 사용하는 PC는 바이트 단위 주소 지정방식을 사용하며,
-
// 따라서 하나의 정수는 4개의 주소에 나누어 저장된다.
-
-
sum += *x1; // 포인터 변수 x1을 증가시키면서 그 포인터가 가리키는 곳의 값(*x1)을 sum에 누적한다.
-
}
-
-
// 배열의 주소를 순서대로 출력해 보라. 그러면 4씩 증가하는것을 볼 수 있을것이다.
-
}
예제2 실행결과 :
예제3. 포인터를 이용하여 2차원 배열 덧셈하기.
-
#include <stdio.h>
-
-
// 행(ROW)과 열(COL)을 3,3으로 지정
-
#define ROW 3
-
#define COL 3
-
-
int main()
-
{
-
// 정수 배열 x, y 선언 및 초기화
-
int x[ROW][COL] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-
int y[ROW][COL] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
-
-
// 결과가 저장될 배열 z선언
-
int z[ROW][COL];
-
-
int i, j, *x1, *y1, *z1;
-
-
// 배열 x, y, z의 시작 주소를 포인터 변수 x1, y1, z1에 대입한다.
-
x1 = &x[0][0];
-
y1 = (int *)y;
-
z1 = (int *)z;
-
-
// 1차원적으로 x(x1), y(y1), 배열의 각 요소를 더해서 배열 z(z1)에
-
// 저장한다. 각 포인터를 증가시키며 계산한다. 정수포인터는 4씩
-
// 자동으로 증가한다. 프로그래머가 신경쓸 필요가 없다.
-
for(i = 0; i < ROW*COL; i++, x1++, y1++, z1++)
-
*z1 = *x1 + *y1;
-
-
//포인터가 변했으므로 다시 z1의 포인터를 z의 시작주소로 바꾼다.
-
z1 = (int *)z;
-
-
//z1의 포인터를 증가하면서 계산 결과를 출력한다.
-
for(i = 0; i < ROW; i++)
-
{
-
for(j = 0; j < COL; j++)
-
}
-
}
예제3 실행결과 :
출처 : http://ic.bu.ac.kr/mediawiki/index.php/%EC%A0%95%EC%88%98%ED%8F%AC%EC%9D%B8%ED%84%B0
'DEVELOPMENT > C/C++' 카테고리의 다른 글
[C/C++] UDP ECHO SERVER 예제 (0) | 2015.02.13 |
---|---|
[C/C++] 윈도우 기반 서버/클라이언트 예제 (0) | 2015.02.11 |
[C/C++] for문을 이용하여 혼자 이동하는 문자만들기 (0) | 2015.01.30 |
[C/C++] 윤년과 평년 구하는 프로그램 (0) | 2015.01.29 |
[C/C++] 여러종류의 입.출력 함수 (0) | 2015.01.29 |