• 검색 결과가 없습니다.

5강. 포인터의 개념 이해하기

N/A
N/A
Protected

Academic year: 2022

Share "5강. 포인터의 개념 이해하기"

Copied!
11
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

C 언어 포인터 정복하기

TAE-HYONG KIM

COMPUTER ENG, KIT

5강. 포인터의 개념 이해하기

(2)

학습 내용

 함수 scanf()를 고민해보자

 포인터가 왜 필요한가?

 포인터는 어떤 정보가 필요한가?

 포인터 구하기

 포인터 값 확인하기

 포인터가 참조하는 값 구하기

2

(3)

scanf() 살펴보기

 scanf()는 무슨 일을 할까?

 프로그램에서 scanf()에 주는 입력은 변환문자열 (“%d”)과 입력할 변수(&a)이다

 scanf()는 키보드(stdin)로부터 정수 입력을 받아 변수 (a)에 저장한다(변수 a의 내용을 바꾼다)

 어떤 함수에서 다른 함수의 지역변수 값을 바꿀 수 있 나?

 scanf() 함수의 인자로 왜 a가 아닌 &a를 넘겨줄까?

int a = 0;

printf(“정수값을 입력하세요: ”);

scanf(“%d”, &a);

(4)

C 프로그램과 메모리

int a; double b; char c;

91 92 93 94 95 96 97 98 99 100 101 102 103

a b

c a = 10; b = 1.0; c = ‘a’;

10 1.0

‘a’

100 101 102

103

a

Little Endian: Lower SB  Lower Address 00001010

00000000 00000000 00000000

(5)

함수 외부의 변수에 접근하기

 변수에 읽고 쓰기

 함수 내부의 변수는 변수 이름을 이용해 쉽게 읽고 쓸 수 있다

 함수 외부의 변수는 인자를 통해 값을 할당 받아서 (call by value) 읽을 수 있지만 직접 쓸 수는 없다

• 함수 외부의 변수는 변수 이름을 통해 내부에서 직접 접 근할 수 없다(invisible)

 함수 외부의 변수 에 접근할 수 있는 방법은?

• 메모리에 직접 접근해야 한다

int a, b; a = 10; b = a;

(6)

메모리 저장 값에 접근하기

 메모리에 저장된 값을 읽어오려면?

100 101 102

103

00001010 a

00000000 00000000 00000000

X

 100번지에 저장된 4바이트 정수(int) 값 을 읽어오자

 알아야 할 정보는?

 4개 바이트 공간의 주소: 100, 101, 102, 103

 저장되어있는 값의 형식: 정수(4바이트)

• 음수표현을 위해 2의 보수 시스템 사용

• 따라서 4개 주소 중 한 값(처음 주소)만 알면 된다

 저장되는 형식: little endian

• 시스템에서 자동 결정

 메모리 주소는 어떻게 알 수 있을까?

 변수의 저장 주소는 실행할 때마다 바뀐다

(7)

C의 해결책: 포인터

 변수를 통해 메모리에 저장된 값 접근

100 101 102

103

00001010 a

00000000 00000000 00000000

X

 변수 a 대신 필요한 정보 모음을 주는 방법

 a의 포인터  &a

 &: 포인터(주소)연산자

 &a(a의 포인터)에 들어있는 정보

 변수 a가 저장된 공간의 시작 주소: 100

 변수 a가 저장되는 방식: int (4바이트 정수)

 scanf()에 &a를 넘겨주면

 scanf()는 정확히 a의 차지하는 공간에 a가 저장 되는 방식으로 값을 저장할 수 있다!

(8)

포인터의 개념

 포인터의 개념적 표현

 포인터 &a가 100번지에 있는 정수형 공간을, 또는 100번지 에 저장된 정수 가리킨다 고 말한다

100 101 102

103

00001010 a

00000000 00000000 00000000

&a

100

int &a

100

int

(9)

포인터에 저장된 주소 얻기

 포인터에 저장된 주소(가리키는 공간의 첫 주소) 확인하

 printf() 함수를 이용해 확인할 수 있다

 주소는 항상 양수이므로 “%d”보다는 “%u”를 사용

 포인터 연산은 정수 단위가 아니라 포인터가 가리키는 공간 자 료형의 크기를 단위로 하는 연산이다

9

int a = 10;

printf(“%u”, &a);

int a = 10;

printf(“%u, %u”, &a, &a+1);

(10)

포인터가 가리키는 공간/값 얻기

 포인터로 메모리 저장 값 접근

 포인터가 가리키는 공간을 얻는 참조연산자 : *

• 사용법: *포인터

• 해당 공간을 변수처럼 사용할 수 있다

 포인터가 가리키는 값 읽어서 변수에 저장하기

 포인터가 가리키는 공간에 값 저장하기

10

int a;  *(&a)

int a=10, b;

b = *(&a);

int a, b=10;

*(&a) = b;

a  *(&a)

(11)

다음 강의 소개

 6강. 포인터를 저장하자

 포인터는 어디에 저장할까?

 포인터 변수의 특징

 포인터 변수의 연산

 포인터 변수로 무엇을 할까?

11

참조

관련 문서

이와 같이 표준용량 두배의 양성자펌프억제제 사용에도 증상이 호전되지 않거나 병변이 개선되지 않는 경우를 난치성 위식 도역류질환(refractory gastroesophageal reflux

반복적인 싞체 움직임(예: 손 흔들기, 상체 흔들기), 사람에 대핚 비정상적인 반응이나 사물에 대핚 애착, 일과 변화에 대핚 저항 등의

- 자아개념의 이론적 구조를 밝힌 Shavelson, Hubner, Stanton(1976)에 따르면 자아개념은 다면적이고 위계적으로 되어 있다고 보고, 일반적 자아개념의 하 위구조로는 크게

[r]

 그 이후에는 정의한 포인터만을 사용하여, 현재 프로그램이 하는 일과 동일한 일을 하도록

C 언어 포인터

C 언어 포인터

C 언어 포인터