Presentation is loading. Please wait.

Presentation is loading. Please wait.

학습목표 Chapter 2-1. 변수와 포인터 변수의 선언과 변수에 대한 메모리 할당을 살펴본다.

Similar presentations


Presentation on theme: "학습목표 Chapter 2-1. 변수와 포인터 변수의 선언과 변수에 대한 메모리 할당을 살펴본다."— Presentation transcript:

1 학습목표 Chapter 2-1. 변수와 포인터 변수의 선언과 변수에 대한 메모리 할당을 살펴본다.
포인터 변수의 선언과 포인터 변수가 참조하는 데이터의 관계를 살펴본다. 포인터 연산의 규칙을 알아본다.

2 1. 변수와 메모리 주소 Chapter 2-1. 변수와 포인터
1. 변수와 메모리 주소 변수(Variable)는 데이터를 저장하기 위한 메모리 공간의 이름이다. 변수는 char, int, float, double과 같은 C 언어의 기본 자료형(Data Type)을 이용하여 선언하며, 자료형의 크기만큼 메모리를 할당받는다. 문자형 : 문자형(char)은 하나의 ASCII 코드로 표현한다. 1바이트 크기로 하나의 문자를 저장하는 용도로 사용되며, ASCII 코드값을 1바이트 정수 형태로 표현한다. (한글은 2 바이트!) 정수형 : 컴퓨터에서 처리하는 가장 기본적인 수는 정수이며, 이러한 정수 값은 크기에 따라 2바이트, 4바이트로 구성되며 크기별로 short, int, long으로 표현된다. 실수형 : 지수부를 갖는 실수형 자료의 표현을 위해 C언어에서는 부동형실수를 사용한다. 이러한 부동형 실수는 표현할 수 있는 실수의 크기, 즉 정밀도에 따라 다음과 같이 정의한다. float형  4바이트 double형  8바이트

3 1.1 변수의 메모리 할당 Chapter 2-1. 변수와 포인터 변수 선언 후, 메모리의 할당구조이다. char ch;
1.1 변수의 메모리 할당 변수 선언 후, 메모리의 할당구조이다. char ch; int num; float f_num; double d_num; printf("%d, %d, %d, %d \n", sizeof(ch), sizeof(num), sizeof(f_num), sizeof(d_num)); 1, 4, 4, 8

4 Chapter 2-1. 변수와 포인터 1.2 변수의 주소 변수는 주어진 시작주소로부터 자료형의 크기만큼 바이트 단위로 메모리에 할당되며, 할당된 영역에 값을 저장하여 사용한다. 주소연산자 “&” char ch; int num; float f_num; double d_num; ch='A'; num=5000; f_num=3.14; d_num=f_num*2; printf("%p, %p, %p, %p \n", &ch, &num, &f_num, &d_num ); // 변수의 시작 주소를 출력한다. %p는 16진수, %u는 10진수 형태로 출력

5 1.3 주소의 연산 Chapter 2-1. 변수와 포인터 값의 연산과 주소의 연산은 차이점이 있다.
1.3 주소의 연산 값의 연산과 주소의 연산은 차이점이 있다. 값의 연산 : 변수에 저장된 값 자체가 변화한다. 주소의 연산 : 변수의 자료형 크기만큼 주소가 변화한다. char ch; int num; float f_num; double d_num; ch='A'; num=5000; f_num=3.14; d_num=f_num*2; printf("%c, %d, %.2f, %.2lf \n", ch, num, f_num, d_num); printf("%p, %p, %p, %p \n", &ch, &num, &f_num, &d_num ); printf("\n%c, %d, %.2f, %.2lf \n", ch+1, num+1, f_num+1, d_num+1); // 값의 증가 printf("%p, %p, %p, %p \n", &ch+1, &num+1, &f_num+1, &d_num+1); // 주소의 증가

6 Chapter 2-1. 변수와 포인터 1.3 주소의 연산 값과 주소의 변화를 보여준다.

7 1.4 cast 연산자 (형변환 연산자) Chapter 2-1. 변수와 포인터
명시적으로 형 변환을 하고자 할 때, 형변환 연산자를 사용할 수 있다. 변수나 값 뿐만 아니라 메모리 주소도 형변환이 가능하다. (형식) (데이터형 *) 주소

8 1.4 cast 연산자 (형변환 연산자) Chapter 2-1. 변수와 포인터
다음은 주소를 형 변환한 다음, 주소값의 변화를 보여준 결과이다. 0012FED8 0012FEC9 0012FEBD 0012FEAD

9 2. 포인터란 무엇인가? Chapter 2-1. 변수와 포인터
2. 포인터란 무엇인가? C언어의 포인터란 어떤 객체에 할당된 메모리 주소를 말한다. 이때 객체는 변수, 함수, 배열 등 메모리를 할당받는 모든 대상을 의미한다. C언어에는 할당받은 메모리 공간의 주소를 확인하고, 제어할 수 있는 포인터 자료형이 있다. 포인터 자료형에는 기본으로 파생되는 다음과 같은 자료형들이 존재한다. 포인터 자료형 포인터 변수 배열 포인터  배열을 가리키는 포인터 포인터 배열  포인터를 원소로 하는 배열 함수 포인터  함수를 가리키는 포인터 다중 포인터 포인터에는 실행중인 프로세스의 메모리 영역을 접근할 수 있는 주소를 저장하며, 포인터 자료형에 따라 실행중인 프로세스의 메모리에 접근할 대상이 달라지게 된다.

10 Chapter 2-1. 변수와 포인터 2.1 포인터 변수 포인터 변수란 다른 객체에 할당된 메모리의 시작 주소를 저장하는 변수를 의미한다. (형식) 자료형 *변수이름; &: 변수에 할당된 메모리의 시작 주소를 의미하는 연산자 *: 포인터 변수가 가리키는 위치에 저장된 내용을 참조하는 연산자(실행문) 자료형과 무관한 4바이트!

11 Chapter 2-1. 변수와 포인터 2.1 포인터 변수 포인터 변수를 이용한 메모리 참조

12 2.2 포인터 변수의 자료형 Chapter 2-1. 변수와 포인터 포인터 변수 선언시 주의할 점은, 포인터 변수의 자료형이다.
포인터 변수는 어떠한 자료형으로 선언하더라도 32비트 운영체제에서는 항상 4바이트를 할당 받게 된다.  주소값을 저장하기 위하여! 포인터 변수의 자료형? 포인터 변수는 할당된 주소에 저장할 데이터와 동일한 자료형으로 선언되어야 한다. 변수와 포인터 변수의 자료형이 다르면 어떤 현상이 발생할까? 포인터 변수의 자료형은 포인터 변수가 가리키는 주소로 부터 몇 바이트를 읽어 와야 하는지에 대한 정보를 주는 것이다. 이때 참조할 대상의 크기가 정확하지 않다면 다른 주소로 가서 의미 없는 데이터를 참조하게 되므로, 프로그램의 결과는 논리 오류가 된다.

13 Chapter 2-1. 변수와 포인터 2.2 포인터 변수의 자료형 예제

14 Chapter 2-1. 변수와 포인터 2.2 포인터 변수의 자료형 예제 문자 ‘A’의 ASCII 코드 값 출력

15 3. 포인터 연산자 Chapter 2-1. 변수와 포인터
포인터 변수는 +, -, ++, -- 연산자를 이용하여 처리할 수 있으며, 이때 연산의 결과는 포인터 변수의 자료형 크기만큼 증감된다.

16 Chapter 2-1. 변수와 포인터 3. 포인터 연산의 결과

17 3. cast 연산자를 이용한 포인터 연산 Chapter 2-1. 변수와 포인터
포인터 변수는 형변환 연산자를 사용하여 처리할 수 있다.

18 3. cast 연산자를 이용한 포인터 연산 결과 Chapter 2-1. 변수와 포인터
double형 포인터 변수를 다른 자료형으로 형 변환한 후, 포인터 수식을 처리하고 있다. 이때 주소의 1 증가는 포인터변수가 형변환된 자료형의 크기만큼 증가되는 것을 확인할 수 있다.

19 Chapter 2-1. 변수와 포인터 요약 변수에는 값을 저장하며, 변수를 저장하기 위한 메모리는 선언한 자료형의 크기만큼 할당된다. 주소연산자 “&”를 사용하여 변수에 할당된 메모리의 시작주소를 참조할 수 있다. 포인터 변수는 주소를 저장하기 위한 변수이며, * 변수명 의 형태로 선언한다. 포인터 변수에 할당되는 메모리의 크기는 선언되는 자료형과 무관하며, 32비트 운영체제에서는 항상 4바이트를 할당받는다. 참조연산자 “*”를 사용하여, 포인터 변수의 주소에 저장된 데이터를 참조할 수 있다.


Download ppt "학습목표 Chapter 2-1. 변수와 포인터 변수의 선언과 변수에 대한 메모리 할당을 살펴본다."

Similar presentations


Ads by Google