Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 정수론
- web
- String
- 따라하며 배우는 C언어
- Python
- C언어
- C
- JavaScript
- greedy
- 생활코딩
- graph
- Cleancode
- 인프런
- Math
- Algospot
- 백준
- BASIC
- Algorithm
- 따배씨
- dfs
- DP
- 종만북
- BOJ
- server
- udemy
- 따라하면서 배우는 C언어
- sorting
- php
- BFS
- programmers
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 10.16 다차원 배열을 함수에게 전달해 주는 방법 본문
따배씨 - 따라하며 배우는 C언어
10강 배열과 포인터
10.16 다차원 배열 Multidimensional Arrays 을 함수에게 전달해 주는 방법
#include <stdio.h>
#define ROWS 3
#define COLS 4
int sum2d_1(int ar[ROWS][COLS]);
int sum2d_2(int ar[][COLS], int row);
//int sum2d_2(int [][COLS], int row);
//int sum2d_2(int (*ar)[COLS], int col);
int sum2d_3(int* ar, int row, int col);
//int sum2d_3(int*, int, int);
int main(){
int data[ROWS][COLS] = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 0, 1, 2} };
printf("%d\n", data[2][3]);
// 2
int* ptr = &data[0][0];
printf("%d\n", *(ptr + 3 + COLS * 2)); // *(ptr + 11)
// 2
printf("Sum of all elements = %d\n",sum2d_1(data));
printf("Sum of all elements = %d\n",sum2d_2(data, ROWS));
printf("Sum of all elements = %d\n",sum2d_3(&data[0][0], ROWS, COLS));
return 0;
}
int sum2d_1(int ar[ROWS][COLS]){
int r, c, tot = 0;
for (r = 0; r < ROWS; r++){
for (c = 0; c < COLS; c++){
tot += ar[r][c];
}
}
return tot;
}
int sum2d_2(int ar[][COLS], int row){
int r, c, tot = 0;
for (r = 0; r < row; r++){
for (c = 0; c < COLS; c++){
tot += ar[r][c];
}
}
return tot;
}
int sum2d_3(int* ar, int row, int col){
int r, c, tot = 0;
for (r = 0; r < row; r++){
for (c = 0; c < col; c++){
tot += *(ar + c + col * r); // ar[c + col * r]
}
}
return tot;
}
int sum2d_1(int ar[ROWS][COLS]);
- prototype 에 배열의 크기를 명시하여도, 함수는 배열의 주소값만 받아와서 사용
int sum2d_2(int ar[][COLS], int row);
int sum2d_2(int [][COLS], int row);
int sum2d_2(int (*ar)[COLS], int col);
- 가장 왼쪽의 index는 생략하고, 추가로 값을 넘겨주는 형식도 가능
int sum2d_2(int (*ar)[COLS], int col);
- 복잡한 표현방법이라 추천하지 않음
- 'COLS 의 개수만큼의 원소를 갖는 배열에 대한 포인터' 라는 의미
int sum2d_3(int* ar, int row, int col);
int sum2d_3(int*, int, int);
- 높은 차원의 배열을 표현 할 때, 많이 사용됨
*(ar + c + col * r); // ar[c + col * r]
- 표현 방법
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
'Language > C' 카테고리의 다른 글
[따배씨] 10.18 복합 리터럴과 배열 (0) | 2021.06.08 |
---|---|
[따배씨] 10.17 변수로 길이를 정할 수 있는 배열 (VLAs) (0) | 2021.06.08 |
[따배씨] 10.15 포인터의 호환성 (0) | 2021.06.07 |
[따배씨] 10.14 2차원 배열과 포인터 (0) | 2021.06.06 |
[따배씨] 10.12 포인터에 대한 포인터 (2중 포인터) 의 작동 원리 ~ 10.13 포인터의 배열과 2차원 배열 (0) | 2021.06.06 |
Comments