반응형 Show 동적할당
코드를 작성하면서 최적화라던지 여러가지 이유로 런타임에 배열의 크기를 결정해야 할 때가 있습니다.
예제<1차원 배열>우선 크기가 5인 일차원 배열을 선언하는 경우의 코드입니다.
일차원 배열의 경우에는 그냥 간단히 new 키워드를 이용해서 위와 같이 선언하면 됩니다. 2차원 배열의 경우에는 살짝 다릅니다.
<2차원 배열>2차원 배열의 경우에는 2중 포인터를 사용합니다. arr의 각각의 인덱스들이 일차원 배열을 가르키고 있는 형태입니다.
아래와 같은 형태로 2차원 배열을 동적할당 할 수 있습니다.
위의 코드와 같은 형태로 3X4 배열을 동적할당하는 코드를 작성해보겠습니다. 실제 코드를 작성할 때는 런타임에 row와 col 변수에 변수를 입력 받아서, 대입하면 됩니다.
2차원 배열 할당 해제
그렇다면 할당한 2차원 배열을 할당 해제하는 방법을 알아보겠습니다.
가벼운 마음으로 C++에서 2차원 배열을 어떻게 동적할당을 하는지 알아봤습니다. 반응형 공유하기 게시글 관리 구독하기기록노트
'컴퓨터 > C\C++' 카테고리의 다른 글[C++ STL]pair 클래스 사용방법 (0)2021.06.05[c언어/c++] isdigit 함수(숫자를 판별하는 함수) (0)2021.05.15[C++]1-1.상속(Inheritance)[feat. 급여관리] (0)2021.05.07C/C++ : static 선언에 대하여 (0)2021.03.022차원 배열을 매개변수로 넘길 때
2차원 배열을 매개변수로 넘길 때 #include <iostream> using std::cout; int func(???) //2차원 배열을 어떤 형태로 받아야 할까? return 0; //메인함수 int arr[2][3]= func(arr); //2차원배열의 주소를 매개변수로 보냄 return 0; 시도해볼 수 있는 예.
1. int** arr ->2차원 배열임을 생각할 때 2차원의 주소이니 더블포인터로 받아야겠다는 생각으로 가장 먼저 시도해볼 수 있는 방법. 그러나 arr[2][3]을 int **형으로 변환할 수 없다는 컴파일 오류
2. int *arr ->int** 실패 후 포인터의 차원이 다른가보다라는 생각으로 두번째로 시도해보는 방법 역시 arr[2][3]을 int *형으로 변환할 수 없다는 컴파일 오류
3. int* arr[3] ->포인터만으로 받는 방법이 모두 실패한 후 배열을 넣어서 시도 그러나 이것은 int*형 배열을 3개 잡는(포인터배열) 방식임으로 당연히 실패
4. int arr[][3] or int arr[2][3] ->위의 경우를 실패하고 단순하게 2차원 배열의 모습으로 전달. 당연이 성공하지만 포인터를 이용한 방식으로 생각해볼 필요가 있음
##int arr[][] of int arr[2][]으로 넘길 시 오류 ->int max[60][100] 이라는 변수를
5. int (*arr)[3] ->성공. (*arr)[3] 뒤에 길이가 3인 2차원배열을 가르키는 포인터
6. int *(arr)[3] ->5번의 경우에서 괄호의 다르게 했을 경우 int [2][3]'에서 'int *[]'(으)로 변환할 수 없습니다.라는 컴파일 오류
=> int [2][3] or int [][3] 방식이나 int (*arr)[3]의 모습으로 전달할 때 성공
즉, 결론은 함수가 넘겨받은 변수 자체로부터 배열 차원들을 알아낼 수 있는 방식으로 전달해주어야 한다. 출저:http://blog.naver.com/ace01kr?Redirect=Log&logNo=130087154648 [출처] [C]2차원 배열을 매개변수로 넘길 때|작성자 민비 공유하기 게시글 관리 구독하기자기계발을 멈추면 죽는다저작자표시
이 글을 공유하기 Google + Kakao Naver '프로그래밍/C언어' 관련 글void형 포인터2011.03.09 함수포인터 정리2011.03.09 배열 포인터 동적할당 (C언어 C++)2011.03.04 enum 은 상수였다...2011.03.04 '프로그래밍/C언어' 관련 글 더보기 댓글(6) 비밀 글 등록 |