피씨컴의 기울어진 공관

13일차

프로그래밍/공부 2013. 1. 29. 13:09

swap의 특징 : 1대 1 교환

 

● ● 포인터 심화

● const

변수앞에 const를 붙이면 해당 변수가 상수화 된다.

변수가 상수화 되기 때문에 곡 선언시에 초기화 해야한다 그렇지 않으면 값을 변경 할 수 없다.

 

const int max = 5;

int a[max] = {};             가능함

const 변수는 변수를 상수화 했기 대문에 선언이 가능하다

C++에서만 가능

 

● 포인터와 const

포인터는 일반변수보다 복잡하다

keypoint는 const의 위치

 

int a = 10

int b = 20;

const int * p = &a;

*p = 10;        // 안됨

 p = &a;        // 됨

*p가 상수화 되는 것은 변수의 상수화이다  p의 주소값은 변경이 된다.

※ 근데 저상태에서 a=10 의 직접대입은 되는듯 ?

 

int a = 10

int b = 20;

int  *const p = &a;

*p = 10;        // 됨

 p = &a;        // 안됨

p가 상수화 되는 것은 주소값의 상수화이다

*p의 주소값은 변경이 된다.

 

 

*의 기준으로 const 위치에 따라 다름

*앞에 붙으면 포인터가 가리키는 변수의 값 변경 불가능

*뒤에 붙으면 포인터 변수의 주소값이 변경 불가능

const int const *p 이것은 const int *p와 같다

즉 자료형은 const와 연관성이 없다.

 

● 포인터와 + 연산자

해당 자료형 크기만큼 주소값을 더한다

int 형 변수일 경우

1000(주소) + 1 = 1004

1000(주소) + 2 = 1008

1000(주소) + 3 = 1012

 

모배열은 포인터이기 때문에 + 를 사용하면 해당 메모리 공간에서 자료형 만큼 이동한 주소를 의미

포인터의 * 연산자는 해당 주소값에 위치한 변수를 의미한다

 

*(p+i) = 우선순위 때문에 괄호로 포인터 차단

 

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

15일차  (0) 2013.01.31
14일차  (0) 2013.01.30
12일차  (0) 2013.01.28
11일차  (0) 2013.01.25
10일차  (0) 2013.01.24
Posted by 피씨컴
// 셔플 알고리즘이란 카드게임에서 카드를 섞는 것과 같이
// 수를 섞어 마치 랜덤으로 숫자가 생성된 것처럼 보이게 하는 알고리즘이다.

#include <iostream>
#include <time.h>

using namespace std;

void main(void) {

    srand(time(NULL));

    int iNum[5] = {0};
    int iDest, iSour, iTemp;

    for(int i=0; i<5; i++) {    // 우선 배열에 숫자를 0~4까지 각각 넣어준다.
        iNum[i] = i;
    }

    for(int i=0; i<10; i++) {    // 랜덤으로 두개의 배열 인덱스를 골라 바꿔준다.
        iDest = rand() % 5;
        iSour = rand() % 5;

        iTemp = iNum[iDest];
        iNum[iDest] = iNum[iSour];
        iNum[iSour] = iTemp;
    }

    for(int i=0; i<5; i++) {
        cout << iNum[i] << endl;
    }
}

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

함수  (0) 2013.02.03
지역 변수 / 전역 변수  (0) 2013.01.31
메모리 영역  (0) 2013.01.31
난수 출력함수 rand() / srand()  (0) 2013.01.24
cin  (0) 2013.01.24
Posted by 피씨컴

12일차

프로그래밍/공부 2013. 1. 28. 13:02

Release : 비주얼 스튜디오 필요없음

Debug : 비주얼 스튜디오 깔려있어야함

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

<< 포인터 >>

      ↓(포인터)       ↓(변수)   

● * 여기에          누가 살아

       ↑(주소)        ↑(변수)

● & 너!              어디살아?

       ↑ (변수)       ↑(주소)

 

 

※ 이렇게 선언하면 포인터가 일반변수가 된다

   int * p          ,       p2;

           ↑포인터                ↑일반변수

 

● 포인터 차원?

포인터가 얼마나가야 일반변수가 되나?

&p    

  p     2차원

*p     1차원

**p    0차원

 

 

● 배열이란?

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

● 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)로 사용불가능 하다

 

 

 

 

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

14일차  (0) 2013.01.30
13일차  (0) 2013.01.29
11일차  (0) 2013.01.25
10일차  (0) 2013.01.24
9일차  (0) 2013.01.24
Posted by 피씨컴