변 수 변 수 변 수 변 수
변수는변할수있는수를담는그릇이다.이 장에서 다룰 내용 변수의 기본 1 구조체 2 n am esp ace 3 형 변환 4
01_ 변수의 기본 변수의 정의
그릇: 값을담을수있는공간 메모리: 물리적으로서로구별이가능한식별자를통해접근할수있는 공간 변수의 구성요소 변수명(Variable Name) 변수형(Variable Type) 변수의 기본 형태와 사용 예 변수형변수명1, 변수명2.. [기본형태]
int var1, var2; [사용예]
01_ 변수의 기본
변수형 사용컴파일러마다조금씩차이를보이지만, 일반적으로아래와같은기본적인 변수형을지원한다 기본변수형앞에signed / unsigned 키워드를더하여부호/미부호변수를 생성할수있다. 변수형변수형변수형변수형사용사용사용사용예예예예내용내용내용내용 boolbool flag;true, false charchar str;하나의문자데이터 short, int, long, long longlong temp;부호가있는정수형 float, doubledouble bigNumber;실수 voidvoid anything;형이없음[기본예제 2- 1] sig n ed 와 u n sig n ed 의 비교 0 1 # in cl u d e <i o st re a m > 0 2 u si n g n a m e sp a ce s td ; 0 3 0 4 v o id m a in () 0 5 { 0 6 i n t a ; 0 7 u n si g n e d i n t b ; 0 8
signedsignedsignedsigned 정수형정수형정수형정수형변수변수변수변수aaaa를를를를선언한다선언한다선언한다선언한다. unsignedunsignedunsignedunsigned 정수형정수형정수형정수형변수변수변수변수bbbb를를를를선언한다선언한다선언한다선언한다....
0 8 0 9 a = - 1; 10 b = - 1; 11 12 c o u t << " a = " < < a < < '\ n '; 13 c o u t << " b = " < < b < < '\ n '; 14 15 b = 1 11 1; 16 17 c o u t << " b = " < < b < < '\ n '; 18 }
unsignedunsignedunsignedunsigned 정수형정수형정수형정수형변수변수변수변수bbbb에에에에+1111+1111+1111+1111을을을을입력한다입력한다입력한다입력한다....
01_ 변수의 기본
변수의크기 변수의크기는변수선언시정해주는변수형에따라결정된다. 오버플로우와언더플로우 변수는서로자신만의크기를가지고있다. 그런데그크기에맞지않게,char < short < int ≤ long ≤ float < double < long double
변수는서로자신만의크기를가지고있다. 그런데그크기에맞지않게, 즉변수에담을수있는한계가넘는수를입력하면변수는제대로 동작하지못한다. 오버플로우 •정해진크기중가장큰값을넘을경우 언더플로우 •정해진크기중가장작은값을넘을경우[기본예제 2- 2] 오버플로우
01 #include<iostream> 02 using namespace std; 03 void main() 04 { 05 short a = 0; 06 07 cout<< "The size of short-type is " << sizeof(short) << " Bytes\n"; 08 09 a = 32767; 10 11 cout<< a << '\n';ssssigned shortigned shortigned shortigned short형형형형변수변수변수변수aaaa를를를를선언한다선언한다선언한다선언한다.... 표시할표시할표시할표시할수수수수있는있는있는있는숫자다숫자다숫자다숫자다.... 12 13 a = 32768; 14 15 cout<< a << '\n'; 16 17 a = -32768; 18 19 cout<< a << '\n'; 20 21 a = -32769; 22 23 cout<< a << '\n'; 24 }
오버플로우가오버플로우가오버플로우가오버플로우가일어난다일어난다일어난다일어난다. 언더언더언더언더플로우가플로우가플로우가플로우가일어난다일어난다일어난다일어난다.
표시할표시할표시할표시할수수수수있는있는있는있는숫자다숫자다숫자다숫자다....
01_ 변수의 기본 변수의 범위 (s c o p e )와 생명주기
변수가선언되고이용되고, 소멸되는과정을말한다. 선언된변수가유효한범위를말한다. 블록안에서선언된변수는블록안에서만유효하다. •중첩된블록안에서선언된변수는하위블록(좀더안쪽에선언된 블록)들에서도유효하다. •소멸자를호출하거나인위적으로변수를해제하지않는이상, 먼저생성된 변수가나중에소멸된다.변수가나중에소멸된다. •기존에존재하는변수와동일한이름의변수를선언하면, 나중에선언된 변수가기존의변수보다우선한다.[응용예제 2- 4] 변수의 생명주기
01 #include<iostream.h> 02 03 void main() 04 { 05 06 int [ [ [ [ ①①①①] ] ] ] = 1; 07 { 08varvarvarvar 08 09 char [ [ [ [ ②②②②] ] ] ] = 'a'; 10 { 11 12 cout << "var = " << var << '\n'; 13 } 14 cout << "var = " << var << '\n'; 15 } 16 cout << "var = " << var << '\n'; 17 } varvarvarvar
0 1 _변수의 기본 변수의 또 다른 분류
지역변수지역변수 •함수나함수나함수나함수나기타기타기타기타블록블록블록블록안에서안에서안에서안에서선언된선언된선언된선언된변수변수변수변수 •그그그그블록블록블록블록혹은혹은혹은혹은그그그그블록의블록의블록의블록의하위하위하위하위블록에서만블록에서만블록에서만블록에서만유효한유효한유효한유효한변수변수변수변수 전역변수 •어디에도어디에도어디에도어디에도속하지속하지속하지속하지않은않은않은않은가장가장가장가장바깥쪽바깥쪽바깥쪽바깥쪽블록에서블록에서블록에서블록에서선언된선언된선언된선언된변수변수변수변수 •어디에서나어디에서나어디에서나어디에서나유효한유효한유효한유효한변수변수변수변수 저장장소 •autoautoautoauto ––––자동자동자동자동공간공간공간공간 –register –레지스터 •staticstaticstaticstatic––––정적정적정적정적공간공간공간공간 •newnewnewnew/ delete/ delete/ delete/ delete ––––동적동적동적동적공간공간공간공간02_ 구조체 원시 데이터 형과 복합 데이터 형
원시원시 데이터데이터형형 원시원시 데이터데이터형형P ri m it iv e d a ta t yp e 이라고도 하며 , 컴파일 러가 기본적으로 제공하는 데이터 형을 일컫 는다 .
P ri m it iv e d a ta t yp e 이라고도 하며 , 컴파일 러가 기본적으로 제공하는 데이터 형을 일컫 는다 .
복합복합 데이터데이터형형복합복합 데이터데이터형형
C o m p o u n d d a ta t yp e 이라고도 하며 , 일반 적으로 사용자가 직접 형을 정의하고 , 그 객 체를 값처럼 취급하거나 주소를 참조하여 사 용되는 데이터 형을 말한다 . 구조체나 클래스는 여기에 해당된다 .
C o m p o u n d d a ta t yp e 이라고도 하며 , 일반 적으로 사용자가 직접 형을 정의하고 , 그 객 체를 값처럼 취급하거나 주소를 참조하여 사 용되는 데이터 형을 말한다 . 구조체나 클래스는 여기에 해당된다 .
02_ 구조체 구조체의 기본 형태와 사용 예
struct struct struct struct 구조체명 { 변수_선언1; 변수_선언2; .... (구조체_선언) };struct struct struct struct Student { int id; float grade; int gender; };
앞에‘struct’ 라는키워드를사용하여, 구조체를선언한다. 구조체가가지는변수들은변수의선언방법과같은방법으로선언된다.}; [기본형태][사용예]
[기본예제 2- 5] St u d en t 구조체의 사용 - 1
01 #include<iostream> 02 usingnamespace std; 03 structStudent 04 { 05intid; 06float grade; 07intgender; 08 }; 0909 10 void main() 11 { 12structStudent student; 13 14cout<< "학번을입력하세요\t"; 15cin>> student.id; 16 17cout<< "성적을입력하세요\t"; 18cin>> student.grade;StudentStudentStudentStudent형형형형구조체구조체구조체구조체변수를변수를변수를변수를선언한다선언한다선언한다선언한다.... 학번을학번을학번을학번을입력입력입력입력받는다받는다받는다받는다....
[기본예제 2- 5] St u d en t 구조체의 사용 - 2 1 9 2 0 c o u t < < " 성별을 입력하세요 (남성 : 1 , 여성 : 2 )\ t" ; 2 1 c in > > s tu d e n t. g e n d e r; 2 2 2 3 c o u t < < " \ n \ n "; 2 4 c o u t < < " 입력하신 학생의 \ n "; 2 5 c o u t < < " 학번은 " < < s tu d e n t. id < < ' \ n '; 2 6 c o u t. s e tf (i o s :: s h o w p o in t) ;
소수점을소수점을소수점을소수점을표시하도록표시하도록표시하도록표시하도록설정한다설정한다설정한다설정한다....2 6 c o u t. s e tf (i o s :: s h o w p o in t) ; 2 7 c o u t. p re c is io n (2 ); 2 8 2 9 c o u t < < " 성적은 " < < ( fl o a t) s tu d e n t. g ra d e < < ' \ n '; 3 0 3 1 c o u t < < " 성별은 " < < ( s tu d e n t. g e n d e r= = 1 ? " 남자 " : "여자 ") < < ' \ n '; 3 2 c o u t < < " 입니다 .\ n "; 3 3 }
소수점을소수점을소수점을소수점을표시하도록표시하도록표시하도록표시하도록설정한다설정한다설정한다설정한다.... 소수점소수점소수점소수점1111자리까지자리까지자리까지자리까지표시하도록표시하도록표시하도록표시하도록설정한다설정한다설정한다설정한다....
03_ 네임스페이스 (n am esp ace)
namespace 말그대로‘이름이유효한공간’ 이다. 특정namespace안에서선언된이름들은그namespace 블록안에서만 유효하다. ‘::’ 참조자를이용하여특정namespace안의변수에접근이가능하다. 예네임스페이스명::대상명 namespace 네임스페이스명 { 변수 클래스 함수 기타요소 ..... } [부모클래스][자식클래스]namespace Elementary { struct Student { int id; int age; }; }
[기본예제 2- 6] n am esp ace 의 사용 - 1
01 #include<iostream.h> 02 03 namespace Elementary 04 { 05struct Student 06{ 07int id; 08int age; 09}; 10 }초등학생초등학생초등학생초등학생정보정보정보정보처리를처리를처리를처리를위한위한위한위한네임스페이스를네임스페이스를네임스페이스를네임스페이스를 정의한다정의한다정의한다정의한다.... 초등학생초등학생초등학생초등학생정보의정보의정보의정보의구조체를구조체를구조체를구조체를정의한다정의한다정의한다정의한다. 10 } 11 12 namespace University 13 { 14struct Student 15{ 16int id; 17float grade; 18}; 19 }
대대대대학생학생학생학생정보정보정보정보처리를처리를처리를처리를위한위한위한위한네임스페이스를네임스페이스를네임스페이스를네임스페이스를 정의한다정의한다정의한다정의한다.... 대대대대학생학생학생학생정보의정보의정보의정보의구조체를구조체를구조체를구조체를정의한다정의한다정의한다정의한다.
[기본예제 2- 6] n am esp ace 의 사용 - 2
21 void main() 22 { 23 24 struct Elementary::Student eleStudent; 25 26 cout << "Enter Elementary student's ID\n"; 27 cin >> eleStudent.id; 28 cout << "Enter Elementary student's age\n"; 29 cin >> eleStudent.age; 30 31 struct University::Student uniStudent;초등학생용초등학생용초등학생용초등학생용Student Student Student Student 구조체형구조체형구조체형구조체형변수를변수를변수를변수를 선언하고선언하고선언하고선언하고값을값을값을값을입력입력입력입력받는다받는다받는다받는다.... 32 33 cout << "Enter University student's ID\n"; 34 cin >> uniStudent.id; 35 cout << "Enter University student's grade\n"; 36 cin >> uniStudent.grade; 37 38 cout << "Elementary student's" << '\n'; 39 cout << "\t ID = " << eleStudent.id << '\n'; 40 cout << "\t AGE = " << eleStudent.age << '\n'; 41 cout << "University student's" << '\n'; 42 cout << "\t ID = " << uniStudent.id << "\n"; 43 cout << "\t GRADE = " << uniStudent.grade << '\n'; 44 }
대학생대학생대학생대학생용용용용Student Student Student Student 구조체형구조체형구조체형구조체형변수를변수를변수를변수를 선언하고선언하고선언하고선언하고값을값을값을값을입력입력입력입력받는다받는다받는다받는다.... 서로서로서로서로다른다른다른다른StudentStudentStudentStudent에에에에값이값이값이값이제대로제대로제대로제대로 입력되었는지입력되었는지입력되었는지입력되었는지출력해본다출력해본다출력해본다출력해본다.
[기본예제 2- 8] u sin g 의 사용 - 1 0 1 # in c lu d e < io s tr e a m .h > 0 2 0 3 n a m e s p a c e S tu d e n t 0 4 { 0 5 i n t id = 0 ; 0 6 i n t a g e = 8 ; 0 7 c h a r g ra d e = ' A '; 0 8 } 0 9 1 0 v o id m a in () 1 1 { 1 2 c o u t < < " ID = " < < S tu d e n t: :i d < < ' \ n '; 1 3 c o u t < < " A G E = " < < S tu d e n t: :a g e < < ' \ n '; 1 4 c o u t < < " G R A D E = " < < S tu d e n t: :g ra d e < < ' \ n '; 1 5 }
대대대대학생학생학생학생Student namespaceStudent namespaceStudent namespaceStudent namespace를를를를 일일이일일이일일이일일이명시했다명시했다명시했다명시했다...
[응용예제 2- 9] u sin g 의 사용 - 2
01 #include <iostream.h> 02 03 namespace Student 04 { 05 int id = 0; 06 int age = 8; 07 char grade = 'A'; 08 }08 } 09 10 [ ? ] namespace Student; 11 12 void main() 13 { 14 cout << "ID = " << id << '\n'; 15 cout << "AGE = " << age << '\n'; 16 cout << "GRADE = " << grade << '\n'; 17 }대대대대학생학생학생학생네임스페이스를네임스페이스를네임스페이스를네임스페이스를명시하지명시하지명시하지명시하지않고않고않고않고 네임스페이스의네임스페이스의네임스페이스의네임스페이스의내용을내용을내용을내용을사용하겠다는사용하겠다는사용하겠다는사용하겠다는선언을선언을선언을선언을 한다한다한다한다....usingusingusingusing
04_ 형 변환 암시적암시적 특별히 명시해주지 않았지만 , 서로 다른 형의 값 혹은 변수 간의 차이 때문에 자동적으로 일어나게 되는 형 변환을 말한다 .
암시적 (E x p li c it ) / 명시적 (I m p li c it ) 형 변환 명시적명시적명시적명시적쉽게 암시적 형 변환의 반대라고 생각하면 되겠다 . 즉, 명시적 형 변환은 우리가 그 형을 의도적으로 명시해 줌으로써 , 형 변환을 수행하게 하는 것이다 .
쉽게 암시적 형 변환의 반대라고 생각하면 되겠다 . 즉, 명시적 형 변환은 우리가 그 형을 의도적으로 명시해 줌으로써 , 형 변환을 수행하게 하는 것이다 .
[기본예제 2 -1 1 ] 명시적 형 변환의 사용
01 #include<iostream.h> 02 03 void main() 04 { 05 int salt = 30; 06 int water = 40; 07 float concentration = 0; 08 float real_concentration = 0; 09 10 concentration = (30 / 40) * 100; 11 cout << "Weight percent = " << concentration << " %\n"; 12 13 real_concentration = (float)30 / (float)40 * 100; 14 cout << "Real Weight percent = " << real_concentration << " %\n"; 15 }대대대대학생학생학생학생형형형형변환변환변환변환없이없이없이없이정수정수정수정수연산을연산을연산을연산을한다한다한다한다.... 명시적명시적명시적명시적형형형형변환변환변환변환후후후후, , , , 연산을연산을연산을연산을한다한다한다한다....
예제모음 _1 학생 정보를 담는 구조체 설계 요 구 사 항 요 구 사 항 요 구 사 항 요 구 사 항
①학생의정보를담을수있는구조체를설계하라. ②학생의정보는다음과같이구성된다. ⓐ번호: 25 ⓑ나이: 15 ⓒ국어성적: 90 ⓓ수학성적: 85 ⓔ과학성적: 95실 행 결 과 실 행 결 과 실 행 결 과 실 행 결 과
예제모음 _1 소스
01 #include<iostream> 02 using namespace std; 03 structStudent 04 { 05 intnumber; 06 intage; 07 intkor; 08 intmath;학생학생학생학생정보를정보를정보를정보를위한위한위한위한구조체를구조체를구조체를구조체를설계한다설계한다설계한다설계한다.... 08 intmath; 09 intsci; 10 }; 11 12 void main() 13 { 14 structStudent student; 15
예제모음 _1 소스
16 student.number = 25; 17 student.age = 15; 18 student.kor = 90; 19 student.math = 85; 20 student.sci = 95; 21 22 cout << "번호가" << student.number << " 인학생의정보: \n"; 23 cout << "나이: " << student.age << '\n'; 24 cout << "국어: " << student.kor << '\n'; 25 cout << "수학: " << student.math << '\n'; 26 cout << "과학: " << student.sci << '\n'; 27 }요약
변수변수C++에서의변수란수학적변수를의미함과동시에 그러한변수를담고있는‘그릇’까지의미한다. 그리고 변수를담고있는‘그릇’을프로그래밍환경과 연결시켜서해석하면그릇은물리적인메모리의어딘가에 할당되어있는공간을의미하게된다. 구조체구조체구조체는변수처럼그자체가쓰이는것이아니라 구조체구조체 변수형처럼구조체형변수선언을위한형태 를정의해놓은것이다. 아래는구조체형변수선언의 일반적인형태다. namespacenamespacenamespace는공동작업시변수나함수명등여러 모듈의이름이겹치는것을막기위한, 말 그대로‘이름공간’이다. 따라서서로다른이름공간에, 동일한이름의변수가있다고할지라도 그둘은각각다른것이며, 각각의namespace 안에서만 그이름이유일한(unique) 것이된다.www.themegallery.com IT CookBook for Beginner, C++IT CookBook for Beginner, C++IT CookBook for Beginner, C++IT CookBook for Beginner, C++ 기초기초기초기초2222장장장장끝끝끝끝