-
2차원 배열의 선언과 사용
***배열명 바로 뒤의 []만 숫자의 생략이 가능
int a[][3][4] <-- 이렇게...
#include <stdio.h>int main(){int iar[3][4] = {{1,2,3,4}, //0행{11,12,13,14}, //1행{21}}; //2행// {}의 개수는 3행// 2차원 배열은 int[4](=하나의 요소)가 3개 있는것과 같음// 1차원의 포인터 요소가 3개있다고 생각해놓자...// [][] 요소에 해당되는 열(뒤의[])은 숫자를 생략할 수 없음- 한 요소의 크기를 잡아야 메모리 사이즈를 잡을 수 있기 때문// 예) int arr =[][4] = {......}; 로 선언가능int arr1[][4]={1,2,3,4,5,6,7};int row=sizeof(arr1)/sizeof(arr1[0]); // 전체 크기/ 한요소 크기 = 요소의 개수= 행의 개수int column = sizeof(arr1[0])/sizeof(arr1[0][0]); // 한 요소 크기 / 한 칸의 사이즈 = 열의 개수// arr1 = arr1[0][0]// arr1[0], arr1[1], arr1[2] <--각각의 요소를 대표하는 주소상수printf("1:%d, 2:%d\n",row, column);for(int i = 0; i < row; i++) {for(int j=0; j<column; j++){printf("%d ", arr1[i][j]);}printf("\n");}}2차원 배열을 함수에서 매개변수로 받을 때 - int iar[][4]가 포인터 변수로 인식됨 int (*arr)[5] <--이런식으로도 가능
---> arr이 포인터 변수이지만 배열인 여러개의 방 덩어리를 가진다는 것을 표시하기 위해서 뒤에 []이 붙어서 2차원 포인터가 됨
void output(int iar[][4], int row, int col){// 반드시 열의 개수는 표시하여 보내줘야함(요소의 사이즈가 결정되도록) 행과 열의 개수는// 전부 보낼 필요는 없으나(단 배열에서 어차피 열은 보내게 되어있음) 행만 보내도 됨for(int i = 0; i < row; i++) {for(int j=0; j<col; j++){printf("%4d", iar[i][j]);}printf("\n");}}2차원 배열 포인터로 출력하기
int ary[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};for(int i = 0; i < 3; i++){for(int j =0;j<4;j++){printf("%u, %u, %u\n",ary+i, *(ary+i)+j, **(ary+i)+j); // *(*(ary+1)+j)//2차원 배열은 *을 두번 찍어야함// 각 행의 첫번째 값만 출력됨각 행의 첫번째 값 또한 주소니까 *을 또해줘야해~~~//3차원이면 ***찍어야됨}}출력값 ---> 주소, 주소, 값
<포인터연산>
ary +1 = 열의 크기가 한 덩어리라서(4열 = 4byte*4 --> 16byte 씩 더해짐)
ary+i -> 각 행의 1열값의 주소만을 출력( 각 행의 대표값)
*(ary+1)을 하면 *을 하나 달아줬으니까 배열의 한 칸(4byte)를 가리키는 값이 됨 --> +1 연산시 4씩 증가
------------------------------------------------------------------------------------------------------------------------------------------------
1행
6422256, 6422256, 1
6422256, 6422260, 2
6422256, 6422264, 3
6422256, 6422268, 4
--------------------------
6422272, 6422272, 5
6422272, 6422276, 6
6422272, 6422280, 7
6422272, 6422284, 8
--------------------------------
6422288, 6422288, 9
6422288, 6422292, 10
6422288, 6422296, 11
6422288, 6422300, 12
'C, C++' 카테고리의 다른 글
포인터 연산과 배열 표현(심화 연습편) (0) 2018.12.19 String 함수의 사용, 선택정렬- 버블정렬 (0) 2018.12.18 포인터 얕은 복사 깊은 복사 (0) 2018.12.13 포인터와 배열 (0) 2018.12.13 포인터 (0) 2018.12.12