SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
고급변수 사용 
포인터와 관련하여 메모리 바라보기
차 례 
• 포인터 변수 
• 배열 
• 문자열 
• 포인터 : 메모리 주소 
• 레퍼런스 변수 
• 동적 할당
포인터 
• 컴퓨터는 처리하는 모든 데이터를 주기억장 
치에 저장한다. 
• 포인터 : 주기억장치의 주소 
….. 
300 
…... 
0012FF60 
• 포인터 변수 : 주소를 저장 
• 일반 변수 : 값을 저장 
값 
주소
포인터 변수 1 
• 변수 
– 저장장소 
– 변수는 사용하기 전에 미리 선언해야 한다. 
– 변수는 사용하기 전에 초기화 되어야 한다. 
• 초기화하지 않은 경우 쓰레기 값이 저장되어 있다. 
값을 저장하려면 
일반 변수로 선언 
되어야 함!! 
주소를 저장하려 
면 포인터 변수로 
선언되어야 함!!
소스 4-2 (ch04_01_1.cpp) 
#include <iostream> 
using namespace std; 
int main() 
{ 
int sum=0, i=0; 
for (i=1; i<=10; i++) 
sum=sum+i; 
cout << "1~10까지의 합 : " << sum << endl; 
return 0; 
} 
중단점 찍고 단계별로 실행하면서 sum 변수의 주소, 변수 값 확인해보기
포인터 변수 2 
• 변수 값 참조 – 일반변수 이름 사용 
• 변수의 주소 확인(주소지정 연산자 & 사용) 
소스 4-2 (ch04_01_1.cpp) 
int a=100;; 
cout << "a에 저장된 값 : " << a << endl; 
cout << "a의 주소 : " << &a << endl; 
return 0; 
실행 결과 
a에 저장된 값 : 100 
a의 주소 : 0012FF60
포인터 변수 3 
• 포인터 변수 
– 변수의 주소를 저장 
– 포인터 변수에 저장할 주소에 저장될 자료형과 
포인터 변수의 자료형은 일치해야 함 
(정수형 포인터 변수는 정수형 변수의 주소, 문자 
형 포인터 변수는 문자형 변수의 주소를 저장함) 
• 일반변수와 마찬가지로 사용 전 선언해야 함 
자료형 일반변수이름; 
자료형 *포인터변수이름;
일반변수와 포인터 변수 
• 일반변수 : 값을 저장해야 할 경우 필요 
• 포인터변수 : 변수의 주소를 저장해야 할 경 
우 (동적 할당 또는 6장 함수에서 다뤄짐) 
일반변수 포인터 변수 비고 
선언 자료형 변수이름; 자료형 *포변수이름; 
& : 주소지정 연산자 
* : 간접 연산자 
값 할당 변수이름=값; 
포변수이름=주소; 
*포변수이름=값; 
선언과 동시에 
초기화 
자료형 변수이름=값; 자료형 *포변수이름=주소; 
‘포인터변수이름’을 ‘포변수이름’으로 표기함
소스 4-4 (ch04_03.cpp) 
#include <iostream> 
using namespace std; 
int main() 
{ 
int a=100;; 
int *pa; 
pa=&a; 
cout << "a에 저장된 값 : " << a << endl; 
cout << "a의 주소 : " << &a << endl; 
cout <<"******************************"<< endl; 
cout << "a에 저장된 값 : " << *pa << endl; 
cout << "a의 주소 : " << pa << endl; 
return 0; 
}
배열 1 
• 변수 
– 하나의 기억 공간 
– 예) 나이, 점수, 성별 등의 데이터를 저장 
• 배열 
– 연속적인 기억 공간 
– 예) 30명의 총점을 저장, 세 과목의 성적을 저장 
– 선언할 때 연속적으로 필요한 기억 공간의 개수 
를 표시
배열 2 
• 배열 선언 : 자료형, 배열이름, 크기 
자료형 배열이름[크기]; 
• 배열 첨자는 0부터 시작 
– int score[3]; 의 경우 
score[0], score[1], score[2] 
– char name[30];의 경우 
name[0], name[1], …. , name[28], name[29]
배열 3 
• 배열이름 = 주소 
int score[3]; 
&score[0] == score 
&score[1] == score+1 
&score[2] == score+2 
char name[5]; 
&name[0] == name 
&name[1] == name+1 
&name[2] == name+2 
&name[3] == name+3 
&name[4] == name+4 
정수형 배열의 경우 각 기억장소가 
4바이트 단위로 증가함 
문자형 배열의 경우 각 기억장소가 
1바이트 단위로 증가함
소스 4-8 (ch04_05.cpp) 
int score[3]={99,88,100}; 
cout << "score[0]의 주소 : " << &score[0] << endl; 
cout << "score[1]의 주소 : " << &score[1] << endl; 
cout << "score[2]의 주소 : " << &score[2] << endl; 
cout << "******************************************" << endl; 
for (int i=0; i<3; i++) 
cout << "score[" << i << "]의 주소 : " << &score[i] << endl; 
cout << "******************************************" << endl; 
cout << "score[0]의 주소 : " << score << endl; 
cout << "score[1]의 주소 : " << score+1 << endl; 
cout << "score[2]의 주소 : " << score+2 << endl; 
cout << "******************************************" << endl; 
for (int i=0; i<3; i++) 
cout << "score[" << i << "]의 주소 : " << score+i << endl;
배열 초기화 
• 선언과 동시에 초기화 
자료형 배열이름[크기]={초기값1, 초기값2, ….}; 
자료형 배열이름[크기]={초기값, }; 
int s[3]={10,20, 30}; 
int a[5]={0,};
문자열 
• 문자열 : 문자의 모음 
• 문자 배열 
char string[30]=“computer”; 
char string[30]={‘c’, ‘o’, ‘m’, ‘p’, ‘u’, ‘t’, ‘e’, ‘r’, ‘0’}; 
– 문자열 상수는 쌍따옴표 “”로 표기 
• 문자열 마지막을 알리는 널(NULL)문자가 자동으로 입 
력됨
소스 4-11 (ch04_10.cpp) 
#include <iostream> 
using namespace std; 
int main() 
{ 
char string[30]="computer"; 
int i=0; 
cout << string << endl; 
for (i=0; string[i]!='0'; i++) 
cout << string[i]; 
cout << endl; 
return 0; 
}
문자열 함수 1 
• 자주 사용하는 문자열 처리 함수를 라이브러 
리에서 제공함 
• 문자열 길이 구하기 
– strlen(const char *_Str) 
• 문자열 복사하기 
– strcpy(char *_Dest, const char *_Str) 
strcpy_s(char *_Dest, rsize_t SizelnBytes, const 
char *_Str)
문자열 함수 2 
• 문자열 결합하기 
– strcat(char *_Dest, const char *_Str) 
– strcat_s(char *_Dest, rsize_t Sizeln Bytes, const 
char *_Str) 
• 문자열 비교하기 
– strcmp(const char *str1, const char *str2)
소스 4-18 (ch04_14.cpp) 
char s_string[100]="C++ programming is very interesting!!!"; 
char d_string[100]; 
cout << "s_string = " << s_string << endl; 
strcpy_s(d_string, _countof(d_string), s_string); 
//s_string를 d_string에 복사하기 
cout << "d_string = " << d_string << endl; 
strncpy_s(d_string, _countof(d_string), s_string, 3); 
//s_string에서 3개의 문자를 d_string에 복사하기 
cout << "d_string = " << d_string << endl; 
strcat_s(d_string, _countof(d_string), "*****"); 
cout << "d_string = " << d_string << endl; 
strncat_s(d_string, _countof(d_string), s_string, 3); 
cout << "d_string = " << d_string << endl;
포인터 : 메모리 주소 
• 포인터의 크기 
– 주기억장치에서의 자료 처리 기본 단위 
– 운영체제에 의해 결정, 윈도우 XP(32비트 운영체 
제) 
int *pi; 
char *pc; 
float *pf; 
double *pd; 
cout << "정수형 포인터 크기 : " << sizeof(pi) << endl; 
cout << "문자형 포인터 크기 : " << sizeof(pc) << endl; 
cout << "실수형 포인터 크기 : " << sizeof(pf) << endl; 
cout << "배정도형 포인터 크기 : " << sizeof(pd) << endl;
레퍼런스 변수 
• 이미 선언한 변수를 다른 이름을 부르는 것 
• 레퍼런스 변수 선언시 반드시 초기화 해야 함! 
자료형 &변수이름=변수;
소스 4-22 (ch04_18.cpp) 
#include <iostream> 
using namespace std; 
int main() 
{ 
int a=100; 
int &ra=a; 
cout << "a= " << a << endl; 
cout << "ra=" << ra << endl; 
cout << "****************" << endl; 
ra=200; 
cout << "a= " << a << endl; 
cout << "ra=" << ra << endl; 
return 0; 
}
동적 할당 1 
• 자료 저장을 위한 기억장소 할당 방법 
– 정적 할당 
• 프로그램에서 필요한 변수를 선언 
• 프로그램 실행 시작에서 필요한 변수에 대한 기억공간 
이 할당됨 
– 동적 할당 
• 프로그램에서 필요한 기억공간의 크기를 할당하여 그 
시작 주소를 기억 (포인터변수 사용!!) 
• 프로그램 실행 중 기억공간이 할당되고, 사용을 마친 
후 할당한 기억공간을 해제
동적 할당 2 
• 기억장소 할당 : new 
• 기억장소 해제 : delete 
자료형 *포인터변수 = new 자료형[개수]; 
delete 포인터변수; //하나의 기억장소 해제 
delete [ ] 포인터변수; //여러 개의 기억장소 해제 
double *dp = new double; //한 개의 배정도형 기억공간 할당 
delete dp; 
int *ip=new int[20]; 
delete [] ip;
소스 4-23 (ch04_19.cpp) 
int *pi = new int; 
*pi=100; 
cout << *pi << endl; 
delete pi; 
int *pj = new int[3]; 
int i; 
pj[0]=10; pj[1]=20; pj[2]=30; 
for (i=0; i<3; i++) 
cout << pj[i] << endl; 
delete [] pj; 
cout << *pi << endl;
Memory Layout

Mais conteúdo relacionado

Mais procurados

파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리Booseol Shin
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스유석 남
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)Juhee Kim
 
고급 시스템 프로그래밍 HW #1
고급 시스템 프로그래밍 HW #1고급 시스템 프로그래밍 HW #1
고급 시스템 프로그래밍 HW #1Leehongki27
 
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법홍준 김
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5KoChungWook
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623Yong Joon Moon
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summaryHoChul Shin
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과민욱 이
 
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)혜웅 박
 
Python datatype
Python datatypePython datatype
Python datatype건희 김
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps
[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps
[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps정연 최
 
Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Daegwon Kim
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function건희 김
 

Mais procurados (19)

파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)
 
Study1
Study1Study1
Study1
 
고급 시스템 프로그래밍 HW #1
고급 시스템 프로그래밍 HW #1고급 시스템 프로그래밍 HW #1
고급 시스템 프로그래밍 HW #1
 
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
Cp2 w5
Cp2 w5Cp2 w5
Cp2 w5
 
변수 이름의 효과
변수 이름의 효과변수 이름의 효과
변수 이름의 효과
 
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
 
Python datatype
Python datatypePython datatype
Python datatype
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps
[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps
[새차원, 코틀린(Kotlin) 강좌] 6. Packages, Return and Jumps
 
Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
 

Semelhante a 04장 고급변수 사용

7 mid term summary
7 mid term summary7 mid term summary
7 mid term summary웅식 전
 
배열과 포인터
배열과 포인터배열과 포인터
배열과 포인터영기 김
 
C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터Yu Yongwoo
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형Hong Hyo Sang
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형Hyosang Hong
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체유석 남
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)문익 장
 
Abstract syntax semantic analyze
Abstract syntax semantic analyzeAbstract syntax semantic analyze
Abstract syntax semantic analyzeHyunJoon Park
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
게임프로그래밍입문 5주차
게임프로그래밍입문 5주차게임프로그래밍입문 5주차
게임프로그래밍입문 5주차Yeonah Ki
 
02장 자료형과 연산자
02장 자료형과 연산자02장 자료형과 연산자
02장 자료형과 연산자웅식 전
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for BioinformaticsHyungyong Kim
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 

Semelhante a 04장 고급변수 사용 (20)

06장 함수
06장 함수06장 함수
06장 함수
 
7 mid term summary
7 mid term summary7 mid term summary
7 mid term summary
 
배열과 포인터
배열과 포인터배열과 포인터
배열과 포인터
 
C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터C 언어 스터디 03 - 배열, 포인터
C 언어 스터디 03 - 배열, 포인터
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
 
파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)
 
Abstract syntax semantic analyze
Abstract syntax semantic analyzeAbstract syntax semantic analyze
Abstract syntax semantic analyze
 
C review
C  reviewC  review
C review
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
5주차 스터디
5주차 스터디5주차 스터디
5주차 스터디
 
게임프로그래밍입문 5주차
게임프로그래밍입문 5주차게임프로그래밍입문 5주차
게임프로그래밍입문 5주차
 
02장 자료형과 연산자
02장 자료형과 연산자02장 자료형과 연산자
02장 자료형과 연산자
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
Study1
Study1Study1
Study1
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 

Mais de 유석 남

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications유석 남
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java유석 남
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿유석 남
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩유석 남
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
11장 상속
11장 상속11장 상속
11장 상속유석 남
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)유석 남
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스유석 남
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료유석 남
 

Mais de 유석 남 (11)

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
11장 상속
11장 상속11장 상속
11장 상속
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료
 
Example
ExampleExample
Example
 

Último

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 

Último (8)

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 

04장 고급변수 사용

  • 1. 고급변수 사용 포인터와 관련하여 메모리 바라보기
  • 2. 차 례 • 포인터 변수 • 배열 • 문자열 • 포인터 : 메모리 주소 • 레퍼런스 변수 • 동적 할당
  • 3. 포인터 • 컴퓨터는 처리하는 모든 데이터를 주기억장 치에 저장한다. • 포인터 : 주기억장치의 주소 ….. 300 …... 0012FF60 • 포인터 변수 : 주소를 저장 • 일반 변수 : 값을 저장 값 주소
  • 4. 포인터 변수 1 • 변수 – 저장장소 – 변수는 사용하기 전에 미리 선언해야 한다. – 변수는 사용하기 전에 초기화 되어야 한다. • 초기화하지 않은 경우 쓰레기 값이 저장되어 있다. 값을 저장하려면 일반 변수로 선언 되어야 함!! 주소를 저장하려 면 포인터 변수로 선언되어야 함!!
  • 5. 소스 4-2 (ch04_01_1.cpp) #include <iostream> using namespace std; int main() { int sum=0, i=0; for (i=1; i<=10; i++) sum=sum+i; cout << "1~10까지의 합 : " << sum << endl; return 0; } 중단점 찍고 단계별로 실행하면서 sum 변수의 주소, 변수 값 확인해보기
  • 6. 포인터 변수 2 • 변수 값 참조 – 일반변수 이름 사용 • 변수의 주소 확인(주소지정 연산자 & 사용) 소스 4-2 (ch04_01_1.cpp) int a=100;; cout << "a에 저장된 값 : " << a << endl; cout << "a의 주소 : " << &a << endl; return 0; 실행 결과 a에 저장된 값 : 100 a의 주소 : 0012FF60
  • 7. 포인터 변수 3 • 포인터 변수 – 변수의 주소를 저장 – 포인터 변수에 저장할 주소에 저장될 자료형과 포인터 변수의 자료형은 일치해야 함 (정수형 포인터 변수는 정수형 변수의 주소, 문자 형 포인터 변수는 문자형 변수의 주소를 저장함) • 일반변수와 마찬가지로 사용 전 선언해야 함 자료형 일반변수이름; 자료형 *포인터변수이름;
  • 8. 일반변수와 포인터 변수 • 일반변수 : 값을 저장해야 할 경우 필요 • 포인터변수 : 변수의 주소를 저장해야 할 경 우 (동적 할당 또는 6장 함수에서 다뤄짐) 일반변수 포인터 변수 비고 선언 자료형 변수이름; 자료형 *포변수이름; & : 주소지정 연산자 * : 간접 연산자 값 할당 변수이름=값; 포변수이름=주소; *포변수이름=값; 선언과 동시에 초기화 자료형 변수이름=값; 자료형 *포변수이름=주소; ‘포인터변수이름’을 ‘포변수이름’으로 표기함
  • 9. 소스 4-4 (ch04_03.cpp) #include <iostream> using namespace std; int main() { int a=100;; int *pa; pa=&a; cout << "a에 저장된 값 : " << a << endl; cout << "a의 주소 : " << &a << endl; cout <<"******************************"<< endl; cout << "a에 저장된 값 : " << *pa << endl; cout << "a의 주소 : " << pa << endl; return 0; }
  • 10. 배열 1 • 변수 – 하나의 기억 공간 – 예) 나이, 점수, 성별 등의 데이터를 저장 • 배열 – 연속적인 기억 공간 – 예) 30명의 총점을 저장, 세 과목의 성적을 저장 – 선언할 때 연속적으로 필요한 기억 공간의 개수 를 표시
  • 11. 배열 2 • 배열 선언 : 자료형, 배열이름, 크기 자료형 배열이름[크기]; • 배열 첨자는 0부터 시작 – int score[3]; 의 경우 score[0], score[1], score[2] – char name[30];의 경우 name[0], name[1], …. , name[28], name[29]
  • 12. 배열 3 • 배열이름 = 주소 int score[3]; &score[0] == score &score[1] == score+1 &score[2] == score+2 char name[5]; &name[0] == name &name[1] == name+1 &name[2] == name+2 &name[3] == name+3 &name[4] == name+4 정수형 배열의 경우 각 기억장소가 4바이트 단위로 증가함 문자형 배열의 경우 각 기억장소가 1바이트 단위로 증가함
  • 13. 소스 4-8 (ch04_05.cpp) int score[3]={99,88,100}; cout << "score[0]의 주소 : " << &score[0] << endl; cout << "score[1]의 주소 : " << &score[1] << endl; cout << "score[2]의 주소 : " << &score[2] << endl; cout << "******************************************" << endl; for (int i=0; i<3; i++) cout << "score[" << i << "]의 주소 : " << &score[i] << endl; cout << "******************************************" << endl; cout << "score[0]의 주소 : " << score << endl; cout << "score[1]의 주소 : " << score+1 << endl; cout << "score[2]의 주소 : " << score+2 << endl; cout << "******************************************" << endl; for (int i=0; i<3; i++) cout << "score[" << i << "]의 주소 : " << score+i << endl;
  • 14. 배열 초기화 • 선언과 동시에 초기화 자료형 배열이름[크기]={초기값1, 초기값2, ….}; 자료형 배열이름[크기]={초기값, }; int s[3]={10,20, 30}; int a[5]={0,};
  • 15. 문자열 • 문자열 : 문자의 모음 • 문자 배열 char string[30]=“computer”; char string[30]={‘c’, ‘o’, ‘m’, ‘p’, ‘u’, ‘t’, ‘e’, ‘r’, ‘0’}; – 문자열 상수는 쌍따옴표 “”로 표기 • 문자열 마지막을 알리는 널(NULL)문자가 자동으로 입 력됨
  • 16. 소스 4-11 (ch04_10.cpp) #include <iostream> using namespace std; int main() { char string[30]="computer"; int i=0; cout << string << endl; for (i=0; string[i]!='0'; i++) cout << string[i]; cout << endl; return 0; }
  • 17. 문자열 함수 1 • 자주 사용하는 문자열 처리 함수를 라이브러 리에서 제공함 • 문자열 길이 구하기 – strlen(const char *_Str) • 문자열 복사하기 – strcpy(char *_Dest, const char *_Str) strcpy_s(char *_Dest, rsize_t SizelnBytes, const char *_Str)
  • 18. 문자열 함수 2 • 문자열 결합하기 – strcat(char *_Dest, const char *_Str) – strcat_s(char *_Dest, rsize_t Sizeln Bytes, const char *_Str) • 문자열 비교하기 – strcmp(const char *str1, const char *str2)
  • 19. 소스 4-18 (ch04_14.cpp) char s_string[100]="C++ programming is very interesting!!!"; char d_string[100]; cout << "s_string = " << s_string << endl; strcpy_s(d_string, _countof(d_string), s_string); //s_string를 d_string에 복사하기 cout << "d_string = " << d_string << endl; strncpy_s(d_string, _countof(d_string), s_string, 3); //s_string에서 3개의 문자를 d_string에 복사하기 cout << "d_string = " << d_string << endl; strcat_s(d_string, _countof(d_string), "*****"); cout << "d_string = " << d_string << endl; strncat_s(d_string, _countof(d_string), s_string, 3); cout << "d_string = " << d_string << endl;
  • 20. 포인터 : 메모리 주소 • 포인터의 크기 – 주기억장치에서의 자료 처리 기본 단위 – 운영체제에 의해 결정, 윈도우 XP(32비트 운영체 제) int *pi; char *pc; float *pf; double *pd; cout << "정수형 포인터 크기 : " << sizeof(pi) << endl; cout << "문자형 포인터 크기 : " << sizeof(pc) << endl; cout << "실수형 포인터 크기 : " << sizeof(pf) << endl; cout << "배정도형 포인터 크기 : " << sizeof(pd) << endl;
  • 21. 레퍼런스 변수 • 이미 선언한 변수를 다른 이름을 부르는 것 • 레퍼런스 변수 선언시 반드시 초기화 해야 함! 자료형 &변수이름=변수;
  • 22. 소스 4-22 (ch04_18.cpp) #include <iostream> using namespace std; int main() { int a=100; int &ra=a; cout << "a= " << a << endl; cout << "ra=" << ra << endl; cout << "****************" << endl; ra=200; cout << "a= " << a << endl; cout << "ra=" << ra << endl; return 0; }
  • 23. 동적 할당 1 • 자료 저장을 위한 기억장소 할당 방법 – 정적 할당 • 프로그램에서 필요한 변수를 선언 • 프로그램 실행 시작에서 필요한 변수에 대한 기억공간 이 할당됨 – 동적 할당 • 프로그램에서 필요한 기억공간의 크기를 할당하여 그 시작 주소를 기억 (포인터변수 사용!!) • 프로그램 실행 중 기억공간이 할당되고, 사용을 마친 후 할당한 기억공간을 해제
  • 24. 동적 할당 2 • 기억장소 할당 : new • 기억장소 해제 : delete 자료형 *포인터변수 = new 자료형[개수]; delete 포인터변수; //하나의 기억장소 해제 delete [ ] 포인터변수; //여러 개의 기억장소 해제 double *dp = new double; //한 개의 배정도형 기억공간 할당 delete dp; int *ip=new int[20]; delete [] ip;
  • 25. 소스 4-23 (ch04_19.cpp) int *pi = new int; *pi=100; cout << *pi << endl; delete pi; int *pj = new int[3]; int i; pj[0]=10; pj[1]=20; pj[2]=30; for (i=0; i<3; i++) cout << pj[i] << endl; delete [] pj; cout << *pi << endl;