티스토리 뷰

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);
}
댓글
댓글쓰기 폼
네이버 이웃추가
«   2019/10   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함