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 |