SPRING :: NOTE
[C] 포인터 예제 소스 및 설명 본문
반응형
예제 1. 포인터의 개념
#include
int main()
{
int i = 10, j = 20, *a; // 정수 변수 i, j, 및 정수 포인터 변수 a선언
a = &i; // 정수 포인터 변수 a에 i의 주소 저장
printf("%p, %p\n", &i, &a); // 정수 변수 i의 주소 및 a의 주소 출력
printf("%d\n\n", *a); // 정수 포인터 a가 가리키는 곳의 데이터 출력,
// 즉, 정수 포인터 a는 i의 주소를 가지고 i의 값을 출력한다.
a = &j; // 정수 포인터 변수 a에 j의 주소 저장
printf("%p, %p\n", &j, &a); // 정수 변수 i의 주소 및 a의 주소 출력
printf("%d\n", *a); // 정수 포인터 a가 가리키는 곳의 데이터를 출력,
// 즉, 정수 포인터 a는 j의 주소를 가지고 j의 값을 출력한다.
// 포인터 변수 a의 주소는 변하지 않는다. a가 가지는 포인터 값만 변하기 된다.
}
예제1 실행결과 :
#include
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에 누적한다.
}
printf("sum = %d\n", sum);
// 배열의 주소를 순서대로 출력해 보라. 그러면 4씩 증가하는것을 볼 수 있을것이다.
}
#include
// 행(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++)
printf("%3d ", *z1++);
printf("\n");
}
}
반응형
'Development Language > C · C++ · MFC' 카테고리의 다른 글
[C] 비동기식 에코 서버 (0) | 2016.06.09 |
---|---|
[C] 윈도우 기반 서버/클라이언트 예제 (0) | 2016.06.09 |
[C/C++] for문을 이용하여 혼자 이동하는 문자만들기 (0) | 2016.06.09 |
[C] 윤년과 평년 구하는 프로그램 (0) | 2016.06.09 |
[C/C++] 입력문 (scanf) (0) | 2016.06.08 |
Comments