9장 포인터의 기본문법

JongseokLee·2021년 7월 31일
0

C 프로그래밍 기초

목록 보기
9/15
post-thumbnail

9장 포인터의 기본 문법

1. 포인터 이해하기

1) 포인터란?

  • 메모리의 주소값(일반적으로 16진수 값으로 표현)
  • 포인터 변수 : 포인터를 값으로 가질 수 있는 변수

2) 포인터 변수 선언

  • 포인터 변수 선언 시 변수 이름 앞에 *를 붙여서 선언
  • 자료형 지정 포인터 변수 : 지정된 자료형의 메모리 주소값만 저장
  • 자료형 미지정 포인터 변수 : 모든 자료형의 메모리 주소값을 저장, 자료형 대신에 void 사용

3) 포인터 변수 초기화

  • 일반 변수의 메모리 주소값 지정
    • 참조 연산자(&)를 일반변수 이름 앞에 붙여서 사용
    • 메모리 주소값 0을 의미하는 NULL 지정

4) scanf_s()함수 사용 시 주소 참조 연산자(&) 사용하지 않음

5) 포인터 변수 출력하기 : 간접 참조 연산자(*)를 포인터 변수 이름 앞에 붙여서 사용

6) 포인터의 연산

  • 정수값을 이용한 덧셈과 뺄셈 연산만 가능
  • 동일한 자료형 포인터끼리 대입 연산 가능
  • 포인터 증감 연산 : 자료형의 크기 만큼 증감

7) void 포인터 변수

  • 포인터 변수의 자료형을 미지정
  • 모든 자료형의 포인터를 지정할 수 있음

8) 이중 포인터 변수의 개요

  • 포인터 변수의 포인터를 저장하는 변수
  • 변수이름 앞에 **를 붙여서 선언

2. 배열과 포인터의 관계 이해하기

1) 일차원 배열과 포인터의 관계

  • 배열 변수 이름은 포인터 변수임
  • 배열의 각 요소는 메모리에 연속해서 저장됨
  • 배열의 각 요소는 포인터 변수로 표현할 수 있음

2) 이차원 배열과 포인터의 관계

  • 배열 변수 이름과 행을 대표하는 변수 이름은 포인터 변수임
  • 배열의 각 요소는 메모리에 연속해서 저장됨
  • 배열의 각 요소는 포인터 변수로 표현할 수 있음
  • 배열 포인터를 이용하여 배열 처럼 사용 가능

3) 포인터 배열 이해하기

  • 포인터가 배열의 요소인 배열
  • 포인터 배열 선언 : 배열이름 앞에 *를 붙여서 선언

3. 단원 실습

1) 3행*3열의 2차원 배열 2개 선언 및 초기화
2) 배열 2개에 행렬 합을 구하기

#include <stdio.h>
#define COL 3
#define ROW 3

int main()
{
	int a[COL][ROW] = { {1,2,3}, {4,5,6}, {7,8,9} };
	int b[COL][ROW] = { {1,2,3}, {4,5,6}, {7,8,9} };
	int c[COL][ROW] = { {0,0,0}, {0,0,0}, {0,0,0} };

	// 포인터를 사용하지 않는 경우
	/*
	for (int i = 0; i < COL; i++) {
		for (int j = 0; j < ROW; j++) {
			c[i][j] = a[i][j] + b[i][j];
		}
	}
	*/
	// 포인터를 사용하는 경우
	int *pa = a;
	int *pb = b;
	int *pc = c;

	for (int i = 0; i < COL * ROW; i++) {
		*(pc+i) = *(pa+i) + *(pb+i);
		// * pc++ = *pa++ + *pb++;  // 동일함.
	}

	// 화면 출력
	for (int i = 0; i < COL; i++) {
		for (int j = 0; j < ROW; j++) {
			printf("%4d", a[i][j]);
		}
		printf("        ");
		for (int j = 0; j < ROW; j++) {
			printf("%4d", b[i][j]);
		}
		printf("        ");
		for (int j = 0; j < ROW; j++) {
			printf("%4d", c[i][j]);
		}
		printf("\n");
	}
}

<Result>


1   2   3           1   2   3           2   4   6
4   5   6           4   5   6           8  10  12
7   8   9           7   8   9          14  16  18
									
profile
DataEngineer Lee.

0개의 댓글