본문 바로가기

Code/C++

[C++] Array / Dynamic array/ static array

array 는 list의 포인터 형태이다

 

 

int main() {

        int ary[3] = { 10,20,30 };

        cout << (ary + 0) << '\t' << *(ary + 0) << '\t' << ary[0] << endl;

//ary에는 배열의 시작주소값, * 주소값에있는 elem

        cout << (ary + 1) << '\t' << *(ary + 1) << '\t' << ary[1] << endl;

//ary의 1번째 elem의 주소값 : 메모리주소가 byte단위로구성 4byte가 지난 10, 14가 된다

        cout << (ary + 2) << '\t' << *(ary + 2) << '\t' << ary[2] << endl;

        return 0;

 

 

>>>

008FFB68        10      10

008FFB6C        20      20  //주소값에 1을 더하면 정수인 4byte가 증가된 주소값으로 저장된다 

008FFB70        30      30

 

따라서 Array에서는 주소값을 다루면서 글자출력이 가능해진다!!!!!!!!

 


 

int main() {

        int ary[3] = { 10,20,30 };

        int* begin, * end, * curr;

        begin = ary;

        end = ary + 3;

        curr = begin;

        while (curr != end) {  //curr이 끝주소값을 만날때까지

               cout << *curr << '\t';  //해당 주소값에 저장된 메모리에 점프한다

               curr++;

        }

}

 

 

 

>>>

10      20      30

 

 

 

 

 

0x00

10 <-begin & curr

 

0x01

20

 

0x02

30

ary->

0x03

0x00 <- end(ary+3)

begin->

0x04

0x00

 

 

*curr -> *(0x00)->10

curr++ -> *(0x01)->20 // 그다음 elem의 주소값으로 이동한다

curr++ -> *(0x02)->30

 

Ary 같은경우 pointer로 사용가능하다!!!!!!

ary는 객체가아니다 따라서 굉장히 원시적인 데이터타입

메모리의 블락을 잡아서 그 시작을 pointer로 표시

이떄 그 변수는 pointer변수로써 이를 통해 자료를 탐색할수있었다.


 

#include <iostream>

#include <vector>

using namespace std;

void print(int* begin, int* end) {

        int* curr = begin // 초기화

        while (curr != end) {  // 반복조건

               cout << *curr << '\t';

               curr++;  //0x00 -> 0x01  업데이트

        }

        cout << endl;

}

int sum(int* begin, int* end) {

        int result = 0;

        for (int* curr = begin; curr != end; curr++)//초기화 반복조건 업데이트

               result += *curr;

        return result;

}

int main() {

        int list[3] = { 10,20,30 };

        cout << (list + 0) << '\t'<< *(list + 0) << endl;  //주솟값

        cout << (list + 1) << '\t'<< *(list + 1) << endl;  // 그다음 주소값으로 업데이트(4byte)

        int* begin = list; // list 라는 주솟값으로 점프한다

        int* end = list + 3;

        print(begin, end);

        cout << sum(begin, end) << endl;

        

        return 0;

}

 

>>>

0117F75C        10
0117F760        20
10      20      30
60

 

 

 

add

mem

 

0x00

10 <-begin & curr1

 

0x01

20<-curr이동2

 

0x02

30<-curr이동3

begin->

0x03

0x00 <- end

end->

0x04

0x03

curr ->

0x05

0x00->0x01->0x02

 


동적배열

동적배열이 정적배열보다 모든면에서 좋다!!!!

 

 

// 동적 배열(Dynamic array) : 프로그램 실행 중(run time) 할당/해제가 가능하다

// 정적 배열(Static array) : 프로그램 실행 중 크기가 고정되어 변경 불가

int main() {

        const int size = 3;   // const -> 변수를 상수화

        int list[size] = { 10, 20, 30 }; // 정적배열에는 변수(size)가 들어갈수가없다.

        

        int length = 3;

        cin >> length;  // 키워드로부터 배열의 크기를 입력받음

        int* list2 = new int[length]; // 동적배열 선언, new라는 키워드로 생성, 변수도 사용가능

// double* list2 = new double[length];

        int* begin = list2;

        int* end = list2 + length;

        for (int* curr = begin; curr != end; curr++)

               cin >> *curr;

        for (int* curr = begin; curr != end; curr++)

               cout << *curr <<'\t';

        cout << endl;

        delete[] list2; // 할당해제

        return 0;

}

 

 

5

1

2

3

4

5

1       2       3       4       5

 

 


 

해당 자료는 경희대학교 소프트웨어융합학과 배성호교수님 수업내용을 참조하였습니다.

 

'Code > C++' 카테고리의 다른 글

[C++] (example) Vector Matrix  (0) 2019.10.19
[C++] Vector Matrix  (0) 2019.10.18
[C++] (example) Vector  (0) 2019.10.17
[C++] (example) & operator / pointer / pass by address/ function pointer  (0) 2019.10.17
[C++] Vector /  (0) 2019.10.09