190701-3 쉬어가는 시간
교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다.
● 실제로 많이 쓰는 힙메모리 기반의 포인터 코드를 작성해보자.
● 메모리영역
|
code |
Heap
|
stack
|
GD
|
|
초기화유무
|
|
X |
X
|
O(0으로 초기화)
|
|
#include <stdio.h>
#include <stdlib.h>
int main() {
int* pa = (int*)malloc(sizeof(int) * 10);
for (int i = 0; i < 10; ++i)
pa[i] = i * 10;
for (int i = 0; i < 10; ++i) {
printf("%d ", pa[i]);
}
printf("\n");
}
● c++ 스타일
#include <stdio.h>
#include <stdlib.h>
int main() {
int* pa = new int[10];
for (int i = 0; i < 10; ++i)
pa[i] = i * 10;
for (int i = 0; i < 10; ++i) {
printf("%d ", pa[i]);
}
printf("\n");
delete[] pa;
}
● 현 가장 많이 쓰는 코드 형식
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
vector<int> pa(10);
for (int i = 0; i < 10; ++i)
pa[i] = i * 10;
for (int i = 0; i < 10; ++i)
printf("%d ", pa[i]);
printf("\n");
}
● 인덱스 두개를 사용하는것 -> 이차원 배열
동작을 2x3 배열로 하도록 형변환
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int arr[6] = { 10,20,30,40,50,60 };
int(*pa)[3]; // 열의 개수가 3개인 배열 포인터
pa = (int(*)[3])arr; // 코끼리를 썰어서 냉장고에 넣어라 //배열주소형식
printf("%d %d %d\n", pa[0][0], pa[0][1], pa[0][2]);
printf("%d %d %d\n", pa[1][0], pa[1][1], pa[1][2]);
}
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int(*pa)[3] = (int(*)[3]) malloc(sizeof(int) * 2 * 3); // 열의 개수는 상수라 고정된다.
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 3; ++j)
pa[i][j] = (i * 3 + j+1)*10;
printf("%d %d %d\n", pa[0][0], pa[0][1], pa[0][2]);
printf("%d %d %d\n", pa[1][0], pa[1][1], pa[1][2]);
free(pa);
}
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int(*pa)[3] = new int[2][3];
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 3; ++j)
pa[i][j] = (i * 3 + j + 1) * 10;
printf("%d %d %d\n", pa[0][0], pa[0][1], pa[0][2]);
printf("%d %d %d\n", pa[1][0], pa[1][1], pa[1][2]);
delete[] pa;
}
? pa를 가리키는 배열이 3배수가 아니면??
● 동적으로 열을 바꿀순 없을까?
배열 테이블을 만들어 내는 것이다.
int** 를 사용하여 동적으로 열을 할 수도 있게 하면된다.
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int row = 3;
int col = 4; // input
int** p = (int**)malloc(sizeof(int*) * row);
for (int i = 0; i < row; ++i) {
p[i] = (int*)malloc(sizeof(int) * col);
}
for (int i = 0; i < row; ++i)
for (int j = 0; j < col; ++j)
p[i][j] = (i * 3 + j + 1) * 10;
printf("%d %d %d\n", p[0][0], p[0][1], p[0][2]);
printf("%d %d %d\n", p[1][0], p[1][1], p[1][2]);
for (int i = 0; i < row; ++i) {
free(p[i]);
}
free(p);
}
'c언어 > c++' 카테고리의 다른 글
[c++] CStdioFile과 sscanf_s로 파일 읽어오기 (형식으로 불러오기) (0) | 2020.03.24 |
---|---|
[c++] 메모리활용, vector 동적배열 사용하기 등 (0) | 2019.07.04 |
[STL] Template, 시퀀스 사용 등 (0) | 2019.07.02 |
[c++/cpp] 연산자 오버로딩, 복사생성자, 템플릿(T) 등 (0) | 2019.07.01 |
[c++/cpp] 형변환 dynamic_cast, static_cast, const_cast, reinterpret_cast 등 (0) | 2019.07.01 |