피씨컴의 기울어진 공관

'프로그래밍/공부'에 해당되는 글 55건

  1. 2013.02.26 25일 수업
  2. 2013.02.21 5일차? 6일차? (2/19)
  3. 2013.02.21 4일차? 5일차? (2/18)
  4. 2013.02.21 3일차? 4일차? (2/15)
  5. 2013.02.21 2의보수
  6. 2013.02.20 C++의 새로운 형변환 연산자들 1
  7. 2013.02.19 4장 연습문제
  8. 2013.02.19 3장 연습문제
  9. 2013.02.19 2장 _연습문제
  10. 2013.02.19 4장 예제

● 배열이란?

같은 자료형의 연속적인 기억공간 하나의 이름과 인덱스([,])로 변수를 관리한다

● int a[]

운영체제로 부터 메모리 공간 어딘가에 int 정수 4바이트 X 그배열의 크기 만큼의 공간을 연속적으로 할당받고 그앞에 a라는 문패를 만들고 그속에는 각각 쓰레기 값이 들어있다.

 

● 변수와 배열의 차이

1. 그 연속된 공간의 맨처음 위치

2. 총크기는 타입 크기 X 연속된 개수

3. 배열의 이름 -> 포인터

 

 

모두 같은뜻

 

● int array[10]

int 형 이므로 4바이트 만큼 주소가 건너뛴다.

 

 

● 모배열 특징

모배열은 포인트 변수

하지만 주소값을 변경할 수 없다 (상수)

주소값이 바뀌면 배열 위치를 알수 없기 때문

배열상수 == 배열의 이름 == 모배열 == 상수포인터

 

● A[2]

     A

현재 배열의 맨처음 위치를 나타내는 동시에 배열의 이름이 된다. 보통 배열 A라고 부른다

위와 같은 A를 모배열이라고 부른다

 

[2]

현재 배열에서 이 변수의 위치를 나타내는 수로 0부터 표시되기 때문에 현재 이 변수는 2번째 있는 변수라는 걸 알수 있다

위와 같은 [ ] 안의 수를 인덱스(index) 라고 한다.

 

● 키포인트

배열 요소들은 언제나 메모리에 연속적으로 저장된다

모배열은 왼쪽 값(L-value)로 사용불가능 하다

 

 

 

L-value(left-value): 다음 조건을 만족하는 expression

  • 특정 메모리 위치를 가리키고 있는 것
  • 어떤 값을 assign할 수 있는 것
  • & 연산자를 통해 해당 메모리의 주소값을 가져올 수 있는 것

R-value(right-value) : left-value가 아닌 expression

  • 값을 담을 수 없음 (can't assign)
  • L-value에 값을 담기 위해 임시(temporary)로 생성된 expression
    즉, 임시적으로 표현식이 끝나면 없어지는 값들 (다음 줄에서 사라짐)
  • & 연산자를 통해 해당 메모리의 주소 값을 가져올 수 없음


구분 

L-value 

R-value 

 상수

 불가능

 기능(상수 값 그 자체)

 연산자가 있는 수식

 불가능

 기능(수식의 결과값)

 단순 변수 V

 자신이 기억된 위치

 가능(V에 기록된 값)

 포인터 변수 P

 P 자신이 기억된 위치 

 P가 가리키는 기억장소의 위치

 배열 A[i]

 A에서 i번째 위치

 A에서 i번째 위치에 기록된 값


 

e.g. ++a는 L-value지만, a++는 R-value이다.

 

 

● 문자열

문자를 연속적으로 나열된것

- 컴퓨터의미

데이터로 다루는 일련의 문자

 

- 문자열을 저장하기 위한 자료형이 없다

- 문자를 연속적으로 나열하여 문자열을 표현

- char형 배열이 문자열

- 문자열을 표현할때 " " 를 사용

 

● 문장열 끝에는 항상 NULL(0) 문자가 존재한다.

 

'\0' == NULL == 0 == 문자열의 끝 구분

 

●  문자열의 출력시 문자열의 총크기에 상관없이 NULL 끄지만 출력한다

※ 그래서 "ab\0vb"를 출력하면 ab만 나온다

 

● 사용가능한 크기

일반배열 : 배열의 총 크기

char배열 : 문자열 총크기의 -1 (NULL문자)

 

● 화면출력

일반배열 : 해당 인덱스만 출력

char배열 : 해당 부분부터 NULL문자전 까지 출력

 

●  기본적인 자료 사용

일반배열 : 각각 독립적인 변수로 사용

char배열 : 하나의 문자열로서 사용(독립적으로도 사용가능)

 

● 문자열 상수

값이 변경되지 않는 문자열 상수

 

● char * : 변수로 상수의 시작위치를 저장할 수 있다.

 

char * p = "안녕하세요";

cout << p << endl;

--------------------

 

char str[10] = "abc";

str = "hello";

↑ 상수포인터이며 모배열이라 여기서 한번정한걸 다시 바꿀 수는 없다

 

● 문자 & 아스키 코드

영문 1바이트

한글 2바이트

 

● 배열 요소 구하는 공식

배열의 총 크기 / 배열 하나의 크기

sizeof(e)     /  sizeof(int)

 

● (char *)A - (char *)B -> 형변환 하면 주소 연산이 되어서 A와 B의 주소차를 알 수 있음

'프로그래밍 > 공부' 카테고리의 다른 글

5장 구조체  (0) 2013.03.03
6장 함수  (0) 2013.02.26
5일차? 6일차? (2/19)  (0) 2013.02.21
4일차? 5일차? (2/18)  (0) 2013.02.21
3일차? 4일차? (2/15)  (0) 2013.02.21
Posted by 피씨컴

● 프로그래밍을 하는 이유

순차적이고 집합적이고 구조적인 프로그램을 만들기 위해서

 

● 형 변환

명시적 형 변환 - C형 스타일

묵시적 형 변환 - static_cast<float>(int) C++스타일

   - const

   - dynamic

   - reinterpret

 

 

'프로그래밍 > 공부' 카테고리의 다른 글

6장 함수  (0) 2013.02.26
25일 수업  (0) 2013.02.26
4일차? 5일차? (2/18)  (0) 2013.02.21
3일차? 4일차? (2/15)  (0) 2013.02.21
2의보수  (0) 2013.02.21
Posted by 피씨컴

● SVN관련 아이콘 상태

trunk  : 최신 개발 버전

tags  : 작업용 ? 임시

branches : 패치, 분기가 되는것

초록색 : 현제 저장소와 내것이 같은 버전이다.

빨강 : 작업중이다.

노랑 : 충돌 해결

 

커밋 : 지금 내가 바꾼 내용을 서버에 적용

업데이트 : 말그대로 업데이트

 

 

● 실수의 자릿수 정밀도에 관한...

float, double 표시는 6자리 까지,

double의 경우 6자리 까지만 표시되도 나머지 뒷 자리까지 연산은 제대로 함.

 

cout . precision(수) : 소수점 뒤 자릿수

c++에서만 ????

'프로그래밍 > 공부' 카테고리의 다른 글

25일 수업  (0) 2013.02.26
5일차? 6일차? (2/19)  (0) 2013.02.21
3일차? 4일차? (2/15)  (0) 2013.02.21
2의보수  (0) 2013.02.21
C++의 새로운 형변환 연산자들  (1) 2013.02.20
Posted by 피씨컴

● Linear 선형구조

메모리를 할당할 수 있는 공간

0xffffffff ↔ 0x00000000

 

- 리틀 언디안 (왼쪽 → 오른쪽) ※ 윈도우

-조사 예정

- 빅언디안 (오른쪽← 왼쪽) ※ 리눅스

네트워크 데이타 전송 용

-조사예정.

 

● 인스턴스란?

무형의 존재를 메모리 공간을 실체화 구체화하는 작업

(EX) "운영체제로 부터 메모리 공간  어딘가에 int a형 4바이트 만킁의 공간을 할다 받고"

   까지가 인스턴스

 

● 알뜰지식

모든데이터는 주소없인 안됨

'프로그래밍 > 공부' 카테고리의 다른 글

5일차? 6일차? (2/19)  (0) 2013.02.21
4일차? 5일차? (2/18)  (0) 2013.02.21
2의보수  (0) 2013.02.21
C++의 새로운 형변환 연산자들  (1) 2013.02.20
4장 연습문제  (0) 2013.02.19
Posted by 피씨컴

2의보수

프로그래밍/공부 2013. 2. 21. 01:53

301 ->  0000 0001 0010 1101
1의보수 1111 1110 1101 0010
2의보수 1111 1110 1101 0011


402 ->  0000 0001 1001 0010
1의보수 1111 1110 0110 1101
2의보수 1111 1110 0110 1110


350 ->  0000 0001 0101 1110
1의보수 1111 1110 1010 0001
2의보수 1111 1110 1010 0010

 

500 ->  0000 0001 1111 0100
1의보수 1111 1110 0000 1011
2의보수 1111 1110 0000 1100

 

370 ->  0000 0001 0111 0010
1의보수 1111 1110 1000 1101
2의보수 1111 1110 1000 1110

 

420 ->  0000 0001 1010 0100
1의보수 1111 1110 0101 1011
2의보수 1111 1110 0101 1100


321 ->  0000 0001 0100 0001
1의보수 1111 1110 1011 1110
2의보수 1111 1110 1011 1111

 

311 ->  0000 0001 0011 0111
1의보수 1111 1110 1100 1000
2의보수 1111 1110 1100 1001

 

333 ->  0000 0001 0100 1101
1의보수 1111 1110 1011 0010
2의보수 1111 1110 1011 0011

 

362 ->  0000 0001 0110 1010
1의보수 1111 1110 1001 0101
2의보수 1111 1110 1001 0110

 

 


 

 

'프로그래밍 > 공부' 카테고리의 다른 글

4일차? 5일차? (2/18)  (0) 2013.02.21
3일차? 4일차? (2/15)  (0) 2013.02.21
C++의 새로운 형변환 연산자들  (1) 2013.02.20
4장 연습문제  (0) 2013.02.19
3장 연습문제  (0) 2013.02.19
Posted by 피씨컴

 

형변환이란?

원칙은 같은 타입의 변수끼리 연산을 수행하여야 합니다. 그런데 같은 데이터 타입끼리만 연산이 수행될 때가 아닌 경우도 있습니다. 이때 작은 데이터타입의 변수가 다른 큰 쪽 변수의 타입에 맞게 묵시적으로 변형됩니다. 이를 자동형변환 또는 upcasting이라고 합니다.

 

또는 프로그래머의 의지에 따라 데이터타입을 강제적으로 변환할 수도 있습니다. 이는 보통 데이터범위가 큰 타입을 보다 작은타입으로 변환하는 경우가 대부분이며 이는 강제형변환이라고  또는 downcasting이라고도 합니다.

 

정리하자면,
형변환이란 특정 데이터타입의 변수를 다른 데이터타입으로 변환하는 것입니다
.
-
큰 데이터타입에서 작은 데이터타입으로 변경하는 것을 : downcasting, 강제형변환

-
작은 데이터타입에서 큰 데이터타입으로 변경하는 것을 : upcasting, 자동형변환
다운캐스팅은 보통 강제적, 명시적으로, 업캐스팅은 자동적으로 묵시적으로 이루어집니다.

 

C언어의 형변환 연산자는

float value;

int a;

a = (int) value;

 

와 같이 데이터형이 다르지만 임의로 그 데이터형으로 무조건 변환한다 것이 있었는데.

근데 이놈은 이렇게 무분별하게 무조건적인 데이터변환 해싸서 여차하면 실수로 인한 심각한 프로그램 오류를 발생 시키는 좀 위험한 놈이다.

 

그래서  C++로 넘어오면서 형변환 연산자 들이 새로 나오고 용도가 명확해졌는데 .

그것들은 static_cast , const_cast , dynamic_cast , reinterpret_cast 등이 있다.

 

 

● C언어의 형변환 : 만능 형변환 = 무식한 형변환 = 불가능은 없다 ㅡㅡ;;

 

static_cast : 가장 기본적인 캐스팅이다.

 실수, 정수, 열거형 등 우리가 기본적으로 사용하는 캐스팅이지만 C언어 형태처럼 만능

 으로 뭐든지 변환하지는 못하고 약간의 제약사항등이 있다.

 

사용 예 : 묵시적 변환이 가능한 형변환을 명시적으로 변환한다든지, 수치적인 자료형을 변환한다든

  지,  void*을 원형으로 변환할 때 사용

사용불가 : 서로 다른 타입의 포인터 간의 타입 변환

          서로다른 타입의 포인터간의 변환은 의미 없는 변환이므로 static_cast는 잘못된 형변환

    로컴파일러가 인식합니다

 

  • 컴파일 타임 형변환
  • .

        int n = 10;
        double d = 3.5;

        n = d;      //암시적 형변환
        n = (double)d; // C 스타일의 명시적 형변환
        n = static_cast<double>(d); //C++ 스타일의 명시적 형변환

        cout << *static_cast<int*>(pv) << endl; // void * 형변환


      
     

     

     

     

    ● const_cast : 상수성을 제거하는데 사용한다

    const_cast는 const를 비const화 할 때 사용합니다. 비 const화 할 수 있는 능력의 형변환은 const_cast 뿐입니다.

        const int* pconstint = new int (10);

        int *pint = const_cast<int*>(pconstint);

        pint = 20;

        위와 같이 pint는 상수성이 제거되면서 대상값을 아무 제약없이 변경할 수 있다. (포인터 상수만)

     

  • 컴파일 타임 형변환
  •  

     

     

    ● dynamic_cast : 상속관계 안에서 포인터나 참조자의 타입을 기본클래스에서 파생클래스로 다운캐스

        팅과 다중상속에서 기본클래스간의 안전한 타입캐스팅에 사용한다.

        실행시간에 부모 형식을 자식 형식으로 다운캐스팅(downcasting) 할 때 사용합니

        다. dynamic_cast는 실시간에 형검사를 하거나 형변환할 때 사용합니다. 그리고 다형

        성을 지원하기 위해 부모 형식을 자식 형식으로 다운 캐스트하고 형식을 검사합니다

     

     

    주의사항 : dynamic_cast는 실행 시간에 형변환하여 형변환이 불가능하면 NULL을 반환하고 가능하면 변환합니다. 주의할 점은 다형적인 객체에만(virtual 함수를 포함하는 클래스 객체) dynamic_cast를 사용할 수 있습니다. 당연한 이유로 dynamic_cast는 실행 시간에 정확한 객체 형식을 구분하여 인터페이스를 사용하기 위한(멤버 함수를 호출하기 위한) 목적으로 사용되기 때문입니다.

     

  • 런 타임 형변환
  •  

        class A {...};

        class B : public A { ... }

        A *pBase = new A;

        A *pParent = new B;

        B *pP = new B;

        //pParent = pBase;

        pParent = dynamic_cast<B*>( pBase );

        //pP = pParent;

        pP = dynamic_cast<B*>( pParent );

        위에서 주석처리 된 부분은 컴파일 에러가 나는 부분이다.

        위와 같이 다이나믹 캐스트는 안전하게 부모 클래스에서 파생클래스로 다운캐스팅을 해준다.

        .

     

     

     

    ● reinterpret_cast : 위 3가지 캐스트가 하지 못하는 잡다한 모든 캐스팅을 한다.

      단, 상수형(const) 만은 제거하지 못한다. 클래스간에 상속관계가 성립되지 않거

      나 전혀 타입이 다른 어떠한 객체들,,,,, 전혀 상관이 없는 변수간의 타입변환을 수

      행할 수 있다.

     

     

    C++ 스타일의 형변환에서 가장 무식한 형변환입니다. const만 깰 수 없고 C언어의 형변환처럼 모두 가능합니다. 구현 환경(implementation)에 의존적이며 사용할 일이 거의 없습니다.

     

  • 컴파일 타임 형변환
  •  

    class Point
    {
        int x, y;
    public :
        Point(int _x=0, int _y=0):x(_x),y(_y)
        {
        }
        void Print( )
        {  
            cout << x << ", " << y << endl;
        }
    };
    void main( )
    {
        int n = 10;

        reinterpret_cast<Point&>(n); // 오~~ 가능..
        reinterpret_cast<Point*>(&n); // 오오~~ 가능..
        reinterpret_cast<Point&>(n).Print();// 오오오~~ 가능..
        reinterpret_cast<Point*>(n)->Print();// 오오오오~~ 가능.. ㅡㅡ;
    }

     

     

     

     

     

     

    '프로그래밍 > 공부' 카테고리의 다른 글

    3일차? 4일차? (2/15)  (0) 2013.02.21
    2의보수  (0) 2013.02.21
    4장 연습문제  (0) 2013.02.19
    3장 연습문제  (0) 2013.02.19
    2장 _연습문제  (0) 2013.02.19
    Posted by 피씨컴

     

    ★  연습문제_1번

    //1 다음내용에맞게프로그램코드를작성해보자.
    //① 정수형 배열 변수 score를총 5개의 방만큼선언하고 100, 90, 45, 100, 98으로초기화한다.
    //② 정수형 변수 total을 선언하고 0으로 초기화한다.
    //③ 정수형 포인터 변수 p_score를 선언한다.
    //④ 정수형 포인터 변수 p_total을 선언한다.
    //⑤ p_score에 정수형 배열 score의 주소를 할당한다.
    //⑥ p_total에 total의 주소를 할당한다.
    //⑦ 배열 변수 score의 각 요소를 total에 누적하도록 반복문을 작성한다.
    //⑧ 각 배열의 요소를 p_score를 이용해서 출력한다.
    //⑨ 총점을 p_total를 이용해서 출력한다.

    ● 결과 & 스크린샷

    #include <iostream>

    using namespace std;
    int main()
    {
     int score[5] = {100,90,45,100,100};
     int total = 0;
     int * p_score;
     int * p_total;
     p_score=score;
     p_total = &total;

     for(int i=0;i<5;i++)
     {
      total+=score[i];
     }

     cout << "스코어 : ";
     for(int i=0;i<5;i++)
     {
      cout << *(p_score+i) << " ";
     }
     cout << endl;
     cout << "토탈 : " << *p_total<<endl;
    }
     


     

    ★  연습문제_2번

    //2 다음 프로그램의 실행 결과를 보고 빈칸에 적당한 코드를 적어보자.
    #include <iostream>
    using namespace std;
    int main()
    {
     int a , *pa;

     a= 100;
     pa= &a;
     cout << "a=" << a << endl;
     cout << "*pa=" << *pa << endl;
     cout << " ***********" << endl;
     *pa= 200;
     cout << "a=" << a << endl;
     cout << "*pa=" << *pa << endl;
     return 0;
    }

     

    ● 결과 & 스크린샷

     

     

    ★  연습문제_3번

    3 일반변수와 포인터 변수의 선언문과 대입문에서 ”값” 또는 ”주소”로 적절하게 적어보자.
    ① 자료형 일반변수= 
    ② 일반변수=  
    ③ 자료형 *포인터 변수 = 
    ④ 포인터 변수=  
    ⑤*포인터 변수=  

     

    ● 결과 & 스크린샷

    ① 자료형 일반변수= 값
    ② 일반변수=  값
    ③ 자료형 *포인터 변수 = 주소
    ④ 포인터 변수=  주소
    ⑤*포인터 변수=  값

     

    ★  연습문제_4번

    4 정수형 변수 int score[10]이 선언되어 있다. 다음 예 중에서 서로 같은 것을 찾아보자.
    ①score+3
    ②score[3]
    ③ &score[3]
    ④*(score+3)

    ● 결과 & 스크린샷

    1번과 3번이 같고

    2번과 4번이 같다

    1과 3은 주소를 나타내고 있고
    2와 4는 값을 나타내고 있다

     

    '프로그래밍 > 공부' 카테고리의 다른 글

    2의보수  (0) 2013.02.21
    C++의 새로운 형변환 연산자들  (1) 2013.02.20
    3장 연습문제  (0) 2013.02.19
    2장 _연습문제  (0) 2013.02.19
    4장 예제  (0) 2013.02.19
    Posted by 피씨컴

    ★  연습문제_1번

    //1 다음의 조건을 논리 연산자를 이용해서 하나의 if 문으로 완성해보자.
    //if (x>2) {
    //if (y>2) (
    //z=x+y;
    //cout << 11 Z 11 << z << "\n ";
    //else
    //cout <<"x "<< x << " \n" ;

    ● 결과 & 스크린샷


     if (x>2 && y>2)
     {
      z=x+y;
      cout << " Z " << z << "\n";
     }
     else
      cout <<"x "<< x << " \n";

     

     

    ★  연습문제_2번

    //2 아래 네모 안 코드의 의미를 적고 switch 내용을 if ~ else로 변경해보자.
    //#include <iostream>
    //using namespace std;
    //int main()
    //{
    // int score;
    // char grade;
    // //여기서부터
    // do {
    //  cout << "점수 입력:";
    //  cin >> score;
    // } while (score>100 || score<0);
    // //여기까지가 네모
    //
    // switch (score/10)
    // {
    // case 10:
    // case 9:
    // grade= 'A' ;
    // break;
    // case 8:
    // grade= 'B' ;
    // break;
    // case 7:
    // grade='C' ;
    // break;
    // default:
    // grade= 'F' ;
    // break;
    // }
    // cout << "grade " << grade << "\n";
    // return 0;
    //}

    ● 결과 & 스크린샷

     

    #include <iostream>
    using namespace std;
    int main()
    {
     int score;
     char grade;
     //여기서부터
     do {
      cout << "점수 입력:";
      cin >> score;
     } while (score>100 || score<0);
     //여기까지가 네모

     if(score/10 == 10 || score/10==9)
     {
      grade= 'A' ;
     }
     else if(score/10 == 8)
     {
      grade= 'B' ;
     }
     else if(score/10 == 7)
     {
      grade= 'C' ;
     }
     else
     {
      grade= 'F' ;
     }
     
     
     cout << "grade " << grade << "\n";
     return 0;
    }

     

     

    ★  연습문제_3번

    //3 다음 두 프로그램의 결과를 적고 결과가 다른 이유를 설명하라.

    #include <iostream>
    using namespace std;
    int main()
    {
     cout << "//프로그램 1"<<endl;
     for (int i=0; i <5 ; i++ )
     {
      cout << "i=" << i << endl;
      cout << "******************** " << endl;
     }

     cout << "//프로그램 2"<<endl;
     for (int i=0; i<5; i++)
      cout << "i= "<< i << "\n";
     cout << "**************************** " << endl;
     return 0;
    }

    ● 결과 & 스크린샷

    //프로그램 1 결과
    //i=O
    //********************
    //i=1
    //********************
    //i=2
    //********************
    //i=3
    //********************
    //i=4
    //********************
    //
    //프로그램 2 결과
    //i= 0
    //i= 1
    //i= 2
    //i= 3
    //i= 4
    //****************************

    //for는 기본적으로 1개의 문장을 자기 소속으로 만들수가 있는데.
    // 프로그램 1 같은 경우에는 아이에 괄호를 사용하여 자신의 영역을 만들고 그영역에 반복할 대상을 집어 넣었다.
    // 이렇게 되면 그 영역에 놓인 문장은 같이 반복하게 되는데 그에 비해 프로그램 2의 반복문은 구역을 정해주지 않아서
    // 기본 1개의 문장만 반복하게 되므로 결론적으론 밑별줄은 같이 반복이 되지 않는것이 당연하다.

     

     

     

     

    ★  연습문제_4번

    //4 다음 프로그램의 실행 결과를 적어보자. 프로그램 묘드에서 setw(3)은 출력할 값을 세 자리
    //로 출력하라는 것으로 만약 3을 출력할 경우 앞에 두 자리 빈칸 그리고 3이 출력된다.
    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {
     int i;
     cout << "   | ";
     for (i=1; i<=9; i++)
     cout << setw(3) << i;
     cout << " \n-----------------------------------\n " ;
     for (i=1; i<=9; i++)
     {
      cout << i << " | " ;
      for (int j=1; j <=9; j++)
       cout << setw(3) << i*j;
      cout << " \n ";
     }
    return 0;
    }

    ● 결과 & 스크린샷


    ★  연습문제_5번

    //5 다음 프로그램에서 continue 문을 사용해 3의 배수와 5의 배수만 출력하도록 완성하라.

     

    ● 결과 & 스크린샷

    #include <iostream>
    using namespace std;
    int main()
    {
     int n;
     for (n=0; n<20; n++)
     {
      if(n%3!=0 && n%5!=0 )
       continue;
      cout << n << " ";
     }
     return 0;
    }

    '프로그래밍 > 공부' 카테고리의 다른 글

    C++의 새로운 형변환 연산자들  (1) 2013.02.20
    4장 연습문제  (0) 2013.02.19
    2장 _연습문제  (0) 2013.02.19
    4장 예제  (0) 2013.02.19
    3장 예제  (0) 2013.02.18
    Posted by 피씨컴

    ★  연습문제_1번

    //1 다음 내용을 프로그램 코드로 적어본 다음 하나의 프로그램으로 작성해서 실행 결과를 확인하자.
    // ① double 변수 miles를 선언하고, 100으로 초기화
    // ② double 변수 MILE_TO KILOMETER 선언, 1. 609로 초기화
    // ③ double 변수 kilometer 선언
    // ④ miles와 MILE_TO_KILOMETER을 곱하여 kilometer에 저장
    // ⑤ 화면에 kilometer 출력하기

     

     

    ● 결과 & 스크린샷

    #include <iostream>
    using namespace std;
    int main(void)
    {
     double miles =100;
     double MILE_TO_KILOMETER=1.609f;
     double kilometer;
     kilometer = miles * MILE_TO_KILOMETER;

     cout << kilometer<<endl;
     return 0;
    }

     

     

     

     

     

    ★  연습문제_2번

    //2 다음 내용에 대응되는 각 프로그램 코드를 적어보자.
     //① 정수형 변수 score1을 선언하고, 100으로 초기화한다.
     //② 정수형 변수 score2를 선언하고, 78로 초기화한다.
     //③ 정수형 변수 score3을 선언하고, 78로 초기화한다.
     //④ 앞의 ①, ② , ③을 한 문장으로 선언해보자.
     //⑤ 정수형 변수 total을 선언한다.
     //⑥ 실수형 변수 average를 선언한다.
     //⑦ score1, score2, score3를 모두 더해서 total에 그 결괴를 할당한다.
     //⑧ total을 3으로 나누어서 그 결과를 average에 저장한다.
     //⑨ total을 출력한다.
     //⑩ average를 출력한다.

    ● 결과 & 스크린샷

    #include <iostream>
    using namespace std;
    int main(void)
    {
     int score1=100, score2=78, score3=78;
     int total;
     float average;
     total= score1+score2+score3;
     average = total/3;
     cout <<"총합 :" <<total<<endl;
     cout <<"평균 :"<< average<<endl;

    }

     

     

     

     

    ★  연습문제_3번

    //[연습문제 1]의 내용을 프로그램으로 완성해서 컴파일하고, 발생한 경고 메시지가 있는 경우
    //그 이유를 적어보자. 실행 결과도 적어보자.

     


    #include <iostream>
    using namespace std;
    int main(void)
    {
     double miles =100;
     double MILE_TO_KILOMETER=1.609f;
     double kilometer;
     kilometer = miles * MILE_TO_KILOMETER;

     cout << kilometer<<endl;
     return 0;
    }

     

    ● 결과 & 스크린샷

    ??? 경고가 안뜸??

     

     

     

    ★  연습문제_4번

    //1 다음 내용을 프로그램 코드로 적어본 다음 하나의 프로그램으로 작성해서 실행 결과를 확인하자.
    // ① double 변수 miles를 선언하고, 100으로 초기화
    // ② double 변수 MILE_TO KILOMETER 선언, 1. 609로 초기화
    // ③ double 변수 kilometer 선언
    // ④ miles와 MILE_TO_KILOMETER을 곱하여 kilometer에 저장
    // ⑤ 화면에 kilometer 출력하기

    ● 결과 & 스크린샷

    #include <iostream>
    using namespace std;
    int main(void)
    {
     double miles =100;      
     double MILE_TO_KILOMETER=1.609f;  
     double kilometer;      
     kilometer = miles * MILE_TO_KILOMETER; 

     cout << kilometer<<endl;    
     return 0;
    }


     

     

     

     

     

    ★  연습문제_5번

    //5 다음 프로그램의 실행 결과를 적어보자.
    #include <iostream>
    using namespace std;
    int main()
    {
     cout<< " 사과가"<< 10 << "개 있다 \n" ;
     cout<< " 사과가한개에" << 500 <<"원이다 .\n";
     return 0;
    }

    ● 결과 & 스크린샷

     /*
     결과값
     사과가 10개 있다 개행
     사과가한개에500원이다. 개행

    cout으로 "사과가 10개있다 "를 출력한다 여기서 \n은 개행
    cout으로 "사과가한개에500원이다 "를 출력한다 여기서 \n은 개행
     */

     

     

    ★  연습문제_6번

    //6 다음프로그램의빈칸에적절한묘드를적고 그실행결과를적어보자.

    #include <iostream>
    using namespace std;
    int main()
    {
     int unit , count, total;
     unit=500;
     count=5;
     total=unit*count;
     cout << " 총 금액 " << total << endl;
     return 0;
    }

     

    ● 결과 & 스크린샷

     

     

     

    ★  연습문제_7번

    //7 다음 프로그램을 Visual C++ 2010에서 실행해 보자. 실행 시 발생하는 오류 창을 확인하고
    //그이유를적어보자.

    #include <iostream>
    using namespace std;
    int main()
    {
     int a ;
     cout <<"a "<< a << endl ;
     return 0;
    }

    ● 결과 & 스크린샷


    //int a를 선언하고 초기화를 안해줬기 때문에 a에는 쓰레기 값이 들어있다.
    //그상태로 a를 불러와봤자 제대로된 값이 들어있을리 없으므로 에러가 난것이다.

     

     

     

    ★  연습문제_8번

    //8 다음은 프로그램과 실행 결과이다. 실행 결과가 왜 그렇게 출력되었는지 그 이유를 적어보자.
    #include <iostream>
    using namespace std;
    int main()
    {
     short m_short = 40000;
     cout <<"m_ short 40000 일 때 m_short "<< m_short <<" \n ";
     
     m_short=20000 ;
     cout <<"m_short 20000 일 때 m_short " << m_short <<" \n ";
     int m_int = 40000 ;
     cout <<"m_int 40000 일 때 m_lnt= " << m_int <<" \n ";
     return 0;
    }

    ● 결과 & 스크린샷

     

    '프로그래밍 > 공부' 카테고리의 다른 글

    4장 연습문제  (0) 2013.02.19
    3장 연습문제  (0) 2013.02.19
    4장 예제  (0) 2013.02.19
    3장 예제  (0) 2013.02.18
    2장 예제  (0) 2013.02.18
    Posted by 피씨컴

    4장 예제

    프로그래밍/공부 2013. 2. 19. 01:50

    ★  4장_1번예제

    #include <iostream>
    using namespace std;

    int main ()
    {
     int sum, i;         
     for (i=1; i<=10; i++)      
      sum=sum+i;        

     cout << "1-10 까지의 합" << sum << endl;
     return 0;
    }

    ● 주석 & 과정

    1. 초기화 되지 않았다 그래서 경고
    2. i는 이부분에서 초기화가 이루어지기에 경고는 없다
    3. sum의 초기화 안된 것을 쓰려고 하니 에러가 난다.

    ● 결과 & 스크린샷

     

     

    ★  4장_2번예제

    #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;
    }

    ● 주석 & 과정

    1. 여기서는 sum과 i가 모두 초기화 되었다.
    2. 초기화가 되었기 때문에 아무런 문제없이 연산 대입이 가능하다.
    3. 그리고 결과 출력

    ● 결과 & 스크린샷

     

    ★  4장_3번예제

    #include <iostream>
    using namespace std;

    int main()
    {
     int a=100;         
     cout << "a 어| 저장된 값" << a << endl;  
     cout << "a의 주소"<< &a << endl;   
     return 0;
    }

    ● 주석 & 과정

    1. int a를 선언하고 100으로 초기화한다.
    2. a를 출력 
    3. a의 주소를 출력

    ● 결과 & 스크린샷

     

     

    ★  4장_4번예제

    #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;
    }

    ● 주석 & 과정

    // int a를 선언하고 100으로 초기화
    // int 포인트변수 pa를 선언한다.
    // 포인트 변수 pa에 a변수의 주소를 넘겨준다.
    // a변수 출력
    //a의 주소를 출력

    // pa가 가르키고 있는 주소의 값을 출력
    // pa에 저장된 주소를 출력

    ● 결과 & 스크린샷

     

     

    ★  4장_5번예제

    #include <iostream>
    using namespace std;
    int main ( )
    {
     int a=100;   
     int *pa;   
     pa=&a;    
     cout << a << endl; 
     cout << &a << endl; 
     cout << pa << endl; 
     cout << *pa << endl;
     return 0;
    }

    ● 주석 & 과정

    1. int a를 선언하고 100으로 초기화
    2. int 포인트 변수 pa를 선언
    3. 포인트 변수 pa에 a변수의 주소를 넘겨줌
    4. a의 값 출력
    5. a의 주소 출력
    6. pa가 가지고 있는 주소 출력
    7. pa가 가르키고 있는 주소의 값 출력

    ● 결과 & 스크린샷

     

     

     

    ★  4장_6번예제

    #include <iostream>
    using namespace std;
    int main()
    {
     int b=300;    
     int *pb=&b;    
     cout << b << endl;  
     cout << pb << endl;  
     b=200;     
     cout << *pb << endl; 
     cout << &b << endl;  
     return 0;
    }

     

    ● 주석 & 과정

    1. int b를 선언하고 300으로 초기화
    2. int 포인트변수 pb를 선언하고 b의 주소를 넘겨받음
    3. b의 값 출력
    4. pb가 가르키고 있는 주소 출력
    5. b의 값 200으로 수정
    6. pb가 가르키고 있는 값을 출력
    7. b의 주소 출력

    ● 결과 & 스크린샷

     

     

    ★  4장_7번예제

    #include <iostream>
    using namespace std;

    int main()
    {
     int jumsu1 , jumsu2 , jumsu3;         
     int score[3];             
     cout << "jumsu1 의 주소" << &jumsu1 << endl;     
     cout << "jumsu2 의 주소" << &jumsu2 << endl;     
     cout << "jumsu3 의 주소" << &jumsu3 << endl;     
     cout << "******************************************"   << endl;
     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;  
     return 0;
    }

     

    ● 주석 & 과정

    1. int 형 jumsu1,2,3 을 선언
    2.  int형 score[3]배열 선언
    3. jumsu1의 주소
    4. jumsu2의 주소
    5. jumsu3의 주소
    6. score[0]의 주소 
    7. score[1]의 주소 4바이트씩 주소가 이동됨
    8. score[2]의 주소 4바이트씩 주소가 이동됨
    9. 배열의 각 요소에 대한 주소 출력

    ● 결과 & 스크린샷

     

     

    ★  4장_8번예제

    #include <iostream>
    using namespace std;
    int main ()
    {
     int score[3]={99 , 88 , 100};         
     cout << "score[O] 의주소" << &score[0] << endl;     
     cout << "score[l] 의 주소" << &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[O] 의 주소 " << score << endl;     
     cout << "score[l] 의주소" << score+ 1 << endl;     
     cout << "score[2] 의 주소" << score+2 << endl;     
     cout << " ******************************************" << endl;
     for (int i=0; i<3; i++)
     cout << "score[" << i << "] 의 주소" << score+i << endl;  
     return 0;
    }

    ● 주석 & 과정

    1. int형 배열변수 score[3]선언과 동시에 초기화
    2. score[0]의 주소 출력
    3. score[1]의 주소 출력
    4. score[2]의 주소 출력
    5. score의 각 요소 반복문으로 모두 출력
    6. 배열의 이름은 시작주소를 가지고 있기에 score[0]의 주소 출력
    7. 배열의 이름은 모배열 혹은 상수포인터이다 포인터에 +1을 하면 대상 자료형의 크기만큼 주소가 이동된다.
    8. 배열의 이름은 모배열 혹은 상수포인터이다 포인터에 +1을 하면 대상 자료형의 크기만큼 주소가 이동된다.
    9. 배열의 이름은 모배열 혹은 상수포인터이다 포인터에 +1을 하면 대상 자료형의 크기만큼 주소가 이동된다.


     

    ● 결과 & 스크린샷

     

     

    ★  4장_9번예제

    #include <iostream>
    using namespace std;
    int main ()
    {
     int weight[5]={68 , 54 , 45 , 87 , 96};       
     int s[5]={0 ,};             
     int a[5]={5 , 4 , };           
     int i=0;
     for (i=0; i<5; i++)
     cout << "weight[" << i <<"] "<< weight[i] << endl;    
     cout << "****************************************** " << endl;
     for (i=0; i<5; i++)
     cout << "s[" << i <<"] "<< s[i] << endl;      
     cout << "****************************************** " << endl;
     for (i=0; i<5; i++)
     cout << "a[" << i << "] "<< a[i] << endl;      
     return 0;
    }

    ● 주석 & 과정

    1. int형 weight 배열[5]를 선언과 동시에 초기화
    2. int형 s[5]배열 선언과 동시에 0을 모두 초기화
    3. int형 a[5]배열 선언과 동시에 인덱스 0과 1의 초기화 후 나머진 0으로 초기화
    4. weight 각 요소 출력
    5. s 각 요소 출력
    6. a 각 요소 출력


     

    ● 결과 & 스크린샷

     

     

    ★  4장_10번예제

    #include <iostream>
    using namespace std;
    int main()
    {
     int score[4]={0 ,};        
     int i=0;          
     for (i=0; i<3; i++)
     {
      cout << " 점수" << i+1 << " 입력 : ";
      cin >> score[i];       
      score[3]=score[3]+score[i];     
     }

     for (i=0; i <4; i++)
      cout << score[i] << " " ;     
     cout << endl;
     return 0;
    }

    ● 주석 & 과정

    1. 배열변수 선언하고  모두 0으로 초기화
    2. 변수 선언하고 0으로 초기화
    3. 입력을 받음
    4. 배열 마지막번에다가 차례차례 합계를 누적시킴
    5. 배열의 모든 요소를 출력함.

     

    ● 결과 & 스크린샷

     

     

    ★  4장_11번예제

    #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. char형 배열 변수 [30] 선언"computer"로 초기화
    2. i을 선언하고 0으로 초기화
    3. string 출력 "computer" 출력
    4. i는0으로 수정 하고 string[i]가 '\0'고 다르면 반복 하고 i++
    5. string[i]에 들어있는 문자를 출력

    ● 결과 & 스크린샷

     

     

    ★  4장_12번예제

    #include <iostream>
    using namespace std;
    int main ()
    {
     char string[20]="C++ prograrruning is very interesting!!!"; 
     cout << string << endl;
     return 0;
    }

    ● 주석 & 과정

         char를20개 선언 했지만 초기화의 문장이 선언한것보다 많아서 오버풀로우에러가 난다.

     

    ● 결과 & 스크린샷

     

    ★  4장_13번예제

    #include <iostream>
    using namespace std;
    int main()
    {
     char string[100]="C++ prograrmning is very interesting!!!";  
     cout << string << endl;
     return 0;
    }

    ● 주석 & 과정

    배열의 원소를 충분히 잡아줬으므로 오버플로우 에러가 안난다.

     

    ● 결과 & 스크린샷

     

     

    ★  4장_14번예제

    #include <iostream>
    using namespace std;
    int main ( )
    {

      char ch= 'y', name [30] = "KabDo1" ; 
     cout << &ch << endl;     
     cout << name << endl;     
               
     cout << &name[0] << endl;    
     return 0;
    }

     

    ● 주석 & 과정

          문자열을 출력할 경우 문자열의 첫 번째 문자 시작 주소를 알려주면 널 문자가 표시된 곳까지

    출력되었다.  그래서 문자가 저장된 주소를 cout을 이용해서 아무런 표식 없이 사용하면 문자열로 간주하여 널 문자가 있는  곳까지 메모리에 접근한다.

     

    1. char형으로 ch를 선언 'y'초기화 name[30] 선언"KabDo1" 초기화
    2. cout으로 아무런 표식 없이 문자의 시작주소를 알려주면 문자열로 알고 널이 나올대까지 메모리에 접근 그래서 이상하게 출력이 되는 것
    3. cout으로 아무런 표식 없이 문자의 시작주소를 알려주면 문자열로 알고 널이 나올대까지 메모리에 접근그래서 배열의 시작주소를 뜻하는
    4. 배열이름만으로도 모든 원소가 나오는 것임
    5. 이하동문


     

    ● 결과 & 스크린샷

     

     

    ★  4장_15번예제

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
     char ch= 'y' , name [30] = "KabDol" ; 
     cout << hex << (int)&ch << endl;  
     cout << hex << (int)name << endl;  
     cout << hex << (int) &name[0] << endl; 
     return 0;
    }

    ● 주석 & 과정

    1. 할당 및 초기화
    2. cout으로 문자의 시작주소를 주면 널이 나올때까지 메모리 에 접근하므로 그것을 피하기 위해 형변환을 한다.
    3. cout으로 문자의 시작주소를 주면 널이 나올때까지 메모리 에 접근하므로 그것을 피하기 위해 형변환을 한다.
    4. cout으로 문자의 시작주소를 주면 널이 나올때까지 메모리 에 접근하므로 그것을 피하기 위해 형변환을 한다.


     

    ● 결과 & 스크린샷

     

     

    ★  4장_16번예제

    #include <iostream>
    using namespace std;
    int main ( )
    {
     char s_str [30] ="", d_str [30] ="" ;
     int i=0;        
     cout << "주민등록번호 입력:";
     cin>> s_str;       
     for (i=0; s_str[i]!= '\0'; i++)   
      d_str[i]=s_str[i];     
     d_str[i]=s_str[i];      
     cout << s_str << endl;     
     cout << d_str << endl;     
     return 0;
    }

    ● 주석 & 과정

    1. 선언과 초기화
    2. 입력
    3. s_str[i]이 \0이 아니면 반복 그리고 i++
    4. d_str[i]에 =s_str[i]를 복사
    5.  마지막 널까지 복사
    6. 출력

    ● 결과 & 스크린샷

     

     

    ★  4장_17번예제

    #include <iostream>
    using namespace std;
    int main()
     {
     char s_str[30]="" , d_str[30]= ""; 
     int i=0;
     cout << " 주민등록번호 입력 : ";
     cin>> s_str;      
     strcpy(d_str, s_str);    
     cout << s_str << endl;    
     cout << d_str << endl;    
     return 0;

    }

     

    ● 주석 & 과정

    1. 선언 초기화
    2. 입력받음
    3. strcpy는 원본배열을 대상배열에 복사하는 함수 즉 복사함
    4. 출력


    'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To dis deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

    같은 경고가 나는데 이것은 strcpy함수가 안전하지 않을 수도 있으니 대신 strcpy_s()를 사용하기를 권고 하고 있다는 뜻이다. 이는 기존 문자열 관련 함수에서 보안성에 문제가 발생하여 이를 보완한 함수를 다시 정의했기 때문에 새로 작성된 함수 사용을 권하고 있는 것이다.


     

    ● 결과 & 스크린샷

     

     

    ★  4장_18번예제

    #include <iostream>
    using namespace std;
    int main ( )
    {
     char s_string[100]="C++ prograrrnning is very interesting!! !"; 
     char d_string[100];
     cout <<"s_string "<< s_string << endl;
     strcpy_s(d_string, _countof(d_string) , s_string);     
     cout << "d_string " << d_string << endl;
     strncpy_s(d_string, _countof(d_string) , s_string, 3);    

     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;
     return 0;
    }

    ● 주석 & 과정

    1. _countof(d_string) 사이즈 만큼 d_string에 s_string을 복사하는것이다.
    2. _countof(d_string) 사이즈 만큼 d_string에 s_string을 Maxcount 개수만큼 복사하는것이다. 이때 d_string은 _countof(d_string) 만큼의 기억장소가 할당된 상태
    3. 문자열 "*****"을  d_string에 덧붙인다
    4. _countof(d_string) 사이즈 만큼 d_string에 s_string을 Maxcount 개수만큼 복사하는것이다. 이때 d_string은 _countof(d_string) 만큼의 기억장소가 할당된 상태

     

    ● 결과 & 스크린샷

     

     

    ★  4장_19번예제

    #include <iostream>
    using namespace std;
    int main()
    {
     char jumin[30]={0 ,};                 
     char year[5]={0 ,}, month[3]={0 ,}, day[3]={0 ,};          
     cout << " 주민등록번호 입력 :" ;  
     cin >>jumin;                   
     if (jumin[6]== '1' || jumin[6] =='2' )             
      strcpy_s(year, _countof(year) , "19");            
     else                     
      strcpy_s(year, _countof(year) , "20");            

     strncat_s(year , _countof(year) , jumin, 2);           
     strncpy_s(month, _countof(month) , jumin+2 , 2);          
     strncpy_s(day, _countof(day) , jumin+4 , 2);           
     cout << "당신의 생일은" << year<< "년" << month << "월 " << day << "일입니다 " << endl;
     return 0;
    }

    ● 주석 & 과정

    1. 선언과 초기화
    2. 선언과 초기화
    3. 주민등록번호 입력
    4. jumin[6]이 '1'이거나 '2'이면  //책엔 [7]이라 나오지만 사실[6]이 아니였을까?
    5. year에다가 "19"를 넣어줌
    6. 아니면
    7. year에다가 20을 넣어줌
    8. year에다가jumin을 2만큼 덧붙여줌
    9. month에다가 jumin+2여기서 2는 인덱스.... 를 2만큼 덧붙여줌
    10. day에다가 jumin+4 여기서 4는 인덱스 ... 를 2만큼 덧붙여줌

     

     

    ● 결과 & 스크린샷

     

    ★  4장_20번예제

    #include <iostream>
    using namespace std;
    int main()
    {
     int *pi;            
     char *pc;            

     float *pf;            
     double *pd;            
     cout << " 정수형 포인터 크기 " << sizeof(pi) << endl; 
     cout << " 문자형 포인터 크기 " << sizeof(pc) << endl; 
     cout << " 실수형 포인터 크기 " << sizeof(pf) << endl; 
     cout << " 배정도형 포인터 크기 " << sizeof(pd) << endl; 
     return 0;
    }

    ● 주석 & 과정

    1. 인트형 변수의 주소를 받을 포인터형 변수 선언
    2. char 변수의 주소를 받을 포인터형 변수 선언
    3. float 변수의 주소를 받을 포인터형 변수 선언
    4. double형 변수의 주소를 받을 포인터형 변수 선언
    5. sizeof는 해당 변수의 사이즈를 알려주는 함수 포인터는 자료형에 상관없이 4바이트라 4바이트 출력
    6. sizeof는 해당 변수의 사이즈를 알려주는 함수 포인터는 자료형에 상관없이 4바이트라 4바이트 출력
    7. sizeof는 해당 변수의 사이즈를 알려주는 함수 포인터는 자료형에 상관없이 4바이트라 4바이트 출력
    8. sizeof는 해당 변수의 사이즈를 알려주는 함수 포인터는 자료형에 상관없이 4바이트라 4바이트 출력


     

    ● 결과 & 스크린샷

     

     

    ★  4장_21번예제

    #include <iostream>
    using namespace std;
    int main ( )
    {
     int *pi , i=100;        
     pi=&i;           
     cout <<"pi " << pi << "pi+1 " << pi+1 << endl; 
     return 0;
    }

     

    ● 주석 & 과정

    1. 포인트 변수와 일반 변수(앞 포인터 뒤 일반변수) 선언과 초기화
    2.  포인터변수 pi에 i변수의 주소를 넘겨줌
    3. pi의 주소와 pi+1의 주소를 보여주는데 pi에 +1하면 해당 자료형의 자료크기만큼 주소 이동.

     

    ● 결과 & 스크린샷

     

    ★  4장_22번예제

    #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;  
     
     cout << "a= " << &a << endl;  
     cout << "ra=" << &ra << endl;  
     return 0;
    }

    ● 주석 & 과정

     레퍼런스 변수는 이미 선언된 변수를 다른 이름으로 부르는 변수이다. 따라서 레퍼런스 변수는 변수 선언에서 반드시 어떤 변수를다른 이름으로부르는가를명시해야한다. 즉반드시 초기화가 함께 이루어져야 한다. 레퍼런스 변수는 선언에서 레퍼런스 변수를 나타내는 기호인 주소지정 연산자(&)를 함께 표시한다.

     

    1. a변수를 ra로 부르겠노라 명시한다.
    2. a의 값 출력 
    3. ra값 출력 위아래 둘다 값은 동일할 것이다
    4. ra에 200으로 수정
    5.  a 값 출력
    6. ra 값 출력 위아래 똑같을 것이다  a건 ra건 동일하기 때문
    7.  a 값 출력
    8. ra 값 출력 위아래 똑같을 것이다  a건 ra건 동일하기 때문


     

    ● 결과 & 스크린샷

     

    ★  4장_23번예제

    #include <iostream>
    using namespace std;
    int main ( )
    {
     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;    
     return 0;
    }

    ● 주석 & 과정

    1. 동적할당을 한다.
    2. 동적할당을 한곳에 100을 넣는다.
    3. 출력한다 100이 출력된다.
    4. 동적할당된 메모리를 해제한다.
    5. 동적할당을 한다 이는 배열이다.
    6. 실제 배열처럼 사용할수 있다. 애초에 배열도 모배열 혹은 상수포인터이므로 사용에 지장없다.
    7. 배열의 모든 원소를 출력한다.
    8. 동적할당된 메모리를 해제한다.

     

    ● 결과 & 스크린샷

     

    '프로그래밍 > 공부' 카테고리의 다른 글

    3장 연습문제  (0) 2013.02.19
    2장 _연습문제  (0) 2013.02.19
    3장 예제  (0) 2013.02.18
    2장 예제  (0) 2013.02.18
    4장 정리  (0) 2013.02.17
    Posted by 피씨컴