C: 2차원 배열 크기
2차원 배열의 행과 열을 세는 데 도움이 필요합니다.열을 셀 수 없는 것 같은데요?
#include <stdio.h>
int main() {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
int row = sizeof(result) / sizeof(result[0]);
int column = sizeof(result[0])/row;
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
출력:
행 수: 10개
열 수 : 0
그것은 정수 분할의 문제입니다!
int column = sizeof(result[0])/row;
그래야 한다
int column = 7 / 10;
그리고 정수분할로,7/10==0
.
한 행의 길이를 분할하는 것이 좋습니다.sizeof(result[0])
그 행의 한 원소의 크기만큼.sizeof(result[0][0])
:
int column = sizeof(result[0])/sizeof(result[0][0]);
배열 길이 매크로를 사용하는 것이 훨씬 편리하고 오류가 발생하기 쉽습니다.
#include <stdio.h>
#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))
int main(void)
{
char result[10][7];
printf("Number of rows: %d\n", LEN(result));
printf("Number of columns: %d\n", LEN(result[0]));
return 0;
}
이는 제게 도움이 됩니다. (댓글이 이유를 설명합니다.).
#include <stdio.h>
int main() {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
// 'total' will be 70 = 10 * 7
int total = sizeof(result);
// 'column' will be 7 = size of first row
int column = sizeof(result[0]);
// 'row' will be 10 = 70 / 7
int row = total / column;
printf("Total fields: %d\n", total);
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
이 결과는 다음과 같습니다.
Total of fields: 70
Number of rows: 10
Number of columns: 7
편집:
@AnorZaken이 지적한 대로 배열을 매개 변수로서 함수에 전달하고 결과를 인쇄합니다.sizeof
그 위에, 다른 것이 나올 것입니다.total
. 이것은 배열을 인수(지시자가 아닌)로 전달할 때 C가 복사로 전달하고 그 사이에 C 마법을 적용하기 때문에 자신이 생각하는 것과 정확히 동일하게 전달하지 못하고 있기 때문입니다.자신이 하고 있는 일을 확실히 하고 CPU 작업과 메모리 소모를 피하기 위해서는 참조를 통해 어레이와 개체를 전달하는 것이 좋습니다( 포인터 사용).따라서 이와 같은 것을 사용할 수 있으며 원본과 동일한 결과를 얻을 수 있습니다.
#include <stdio.h>
void foo(char (*result)[10][7])
{
// 'total' will be 70 = 10 * 7
int total = sizeof(*result);
// 'column' will be 7 = size of first row
int column = sizeof((*result)[0]);
// 'row' will be 10 = 70 / 7
int row = total / column;
printf("Total fields: %d\n", total);
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
int main(void) {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
foo(&result);
return 0;
}
// gets you the total size of the 2d array
printf("Arrays Total size: %ld\n",sizeof(result));
// gets you the cumulative size of row which is 5 columns * sizeof(int)
printf("1 row cumulative size: %ld\n",sizeof(result[0]));
// division of total array size with cumulative size of row gets you total number of rows
printf("total number of rows: %ld\n",sizeof(result)/sizeof(result[0]));
// and total number of columns you get by dividing cumulative row size with sizeof(char)
printf("total number of columns: %ld\n",sizeof(result[0])/sizeof(char));
아래 코드에 표시된 매크로를 사용하여 1D, 2D 또는 3D 배열의 치수 크기를 가져옵니다.더 많은 매크로를 유사하게 작성하여 4D 어레이 이상의 치수를 얻을 수 있습니다.(Wickerman이 보기에는 너무 늦었다는 것을 알지만, 이 페이지를 방문하는 다른 사람들을 위한 것입니다.
// Output of the following program
// [
/*
Demo of the advertised macros :
----------------------------------------------
sizeof(int) = 4
sizeof(Array_1D) = 12
ELEMENTS_IN_1D_ARRAY(Array_1D) = 3
sizeof(Array_2D) = 24
ELEMENTS_IN_2D_ARRAY(Array_2D) = 6
ROWS_IN_2D_ARRAY(Array_2D) = 2
COLUMNS_IN_2D_ARRAY(Array_2D) = 3
sizeof(Array_3D) = 96
ELEMENTS_IN_3D_ARRAY(Array_3D) = 24
MATRICES_IN_3D_ARRAY(Array_3D) = 4
ROWS_IN_3D_ARRAY(Array_3D) = 2
COLUMNS_IN_3D_ARRAY(Array_3D) = 3
Array_3D[][][] Printed :
----------------------------------------------
001 002 003
011 012 013
---------------
101 102 103
111 112 113
---------------
201 202 203
211 212 213
---------------
301 302 303
311 312 313
---------------
Wickerman's problem solved :
----------------------------------------------
sizeof(result) = 70
ELEMENTS_IN_2D_ARRAY(result) = 70
ROWS_IN_2D_ARRAY(result) = 10
COLUMNS_IN_2D_ARRAY(result) = 7
*/
// ]
// ====================================================================================================
// Program follows
// ====================================================================================================
// Array Size Macros
// [
#define ELEMENTS_IN_1D_ARRAY(a1D) ( sizeof( a1D ) / sizeof( a1D[0] )) // Total no. of elements in 1D array
#define ELEMENTS_IN_2D_ARRAY(a2D) ( sizeof( a2D ) / sizeof( a2D[0][0] )) // Total no. of elements in 2D array
#define ROWS_IN_2D_ARRAY(a2D) ( sizeof( a2D ) / sizeof( a2D[0] )) // No. of Rows in a 2D array
#define COLUMNS_IN_2D_ARRAY(a2D) ( sizeof( a2D[0] ) / sizeof( a2D[0][0] )) // No. of Columns in a 2D array
#define ELEMENTS_IN_3D_ARRAY(a3D) ( sizeof( a3D ) / sizeof( a3D[0][0][0] )) // Total no. of elements in 3D array
#define MATRICES_IN_3D_ARRAY(a3D) ( sizeof( a3D ) / sizeof( a3D[0] )) // No. of "Matrices" (aka "Slices"/"Pages") in a 3D array
#define ROWS_IN_3D_ARRAY(a3D) ( sizeof( a3D[0] ) / sizeof( a3D[0][0] )) // No. of Rows in each "Matrix" of a 3D array
#define COLUMNS_IN_3D_ARRAY(a3D) ( sizeof( a3D[0][0] ) / sizeof( a3D[0][0][0] )) // No. of Columns in each "Matrix" of a 3D array
// ]
#define PRINTF_d(s) (printf(#s " = %d\n", (int)(s))) // Macro to print a decimal no. along with its corresponding decimal expression string,
// while avoiding to write the decimal expression twice.
// Demo of the Array Size Macros defined above
// [
main()
{
// Sample array definitions
// [
int Array_1D[3] = {1, 2, 3}; // 1D array
int Array_2D[2][3] = // 2D array
{
{1, 2, 3},
{11, 12, 13}
};
int Array_3D[4][2][3] = // 3D Array
{
{
{1, 2, 3},
{11, 12, 13}
},
{
{101, 102, 103},
{111, 112, 113}
},
{
{201, 202, 203},
{211, 212, 213}
},
{
{301, 302, 303},
{311, 312, 313}
}
};
// ]
// Printing sizes and dimensions of arrays with the advertised Array Size Macros
printf(
"Demo of the advertised macros :\n"
"----------------------------------------------\n");
PRINTF_d(sizeof(int));
PRINTF_d(sizeof(Array_1D));
PRINTF_d(ELEMENTS_IN_1D_ARRAY(Array_1D));
PRINTF_d(sizeof(Array_2D));
PRINTF_d(ELEMENTS_IN_2D_ARRAY(Array_2D));
PRINTF_d(ROWS_IN_2D_ARRAY(Array_2D));
PRINTF_d(COLUMNS_IN_2D_ARRAY(Array_2D));
PRINTF_d(sizeof(Array_3D));
PRINTF_d(ELEMENTS_IN_3D_ARRAY(Array_3D));
PRINTF_d(MATRICES_IN_3D_ARRAY(Array_3D));
PRINTF_d(ROWS_IN_3D_ARRAY(Array_3D));
PRINTF_d(COLUMNS_IN_3D_ARRAY(Array_3D));
// Printing all elements in Array_3D using advertised macros
// [
int x, y, z;
printf(
"\nArray_3D[][][] Printed :\n"
"----------------------------------------------\n");
for(x = 0; x < MATRICES_IN_3D_ARRAY(Array_3D); x++)
{
for(y = 0; y < ROWS_IN_3D_ARRAY(Array_3D); y++)
{
for(z = 0; z < COLUMNS_IN_3D_ARRAY(Array_3D); z++)
printf("%4.3i", Array_3D[x][y][z]);
putchar('\n');
}
printf("---------------\n");
}
// ]
// Applying those macros to solve the originally stated problem by Wickerman
// [
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
printf(
"\nWickerman's problem solved :\n"
"----------------------------------------------\n");
PRINTF_d(sizeof(result)); // radha_SIZEOF_2D_ARRAY
PRINTF_d(ELEMENTS_IN_2D_ARRAY(result)); // radha_SIZEOF_2D_ARRAY
PRINTF_d(ROWS_IN_2D_ARRAY(result));
PRINTF_d(COLUMNS_IN_2D_ARRAY(result));
// ]
}
// ]
다른 대답들은 개념을 정말 잘 설명해주지만 초보자에게는 친절하지 않습니다. 그래서 여기 제 버전의 같은 것이 있습니다.
#include <stdio.h>
void main() {
int arr [][3] = { {1,2,3 },
{4,5,6} };
int size_row = sizeof(arr)/sizeof(arr[0]);
int size_col = sizeof(arr[0])/sizeof(arr[0][0]);
printf("Length of row : %d\n",size_row); *Output 24*
printf("Length of column : %d",size_col); *Output 3*
printf("\nTotal size of array : %d",sizeof(arr)); *Output 24*
printf("\nSize of entire first row : %d",sizeof(arr[0])); *Output 12*
printf("\nSize of first element of first row : %d",sizeof(arr[0][0])); *Output 3*
}
#include<stdio.h>
int main(){
printf("\nSize of 2-D Array:\n");
int arr[20][30]={{1,2,3,4,5},{2,1,6,7,8},{3,1,6,7,8}};
int row=sizeof(arr)/sizeof(arr[0]);
int col=sizeof(arr[0])/sizeof(arr[0][0]);
printf("Number of Row: %d",row);
printf("\nNumber of Col: %d",col);
return 0;
}
언급URL : https://stackoverflow.com/questions/34134074/c-size-of-two-dimensional-array
'programing' 카테고리의 다른 글
MariaDB: 단일 미러 DB와 다중 로컬 DB를 가진 슬레이브 (0) | 2023.10.07 |
---|---|
다중 인수를 tong-click 메서드에 전달 (0) | 2023.10.07 |
UIScroll모바일 사파리 탭과 같은 수평 페이징 보기 (0) | 2023.10.07 |
w3wp clr.dll 오류 디버그 방법 (0) | 2023.10.07 |
Android에서 활동에서 단편으로 데이터 전송 (0) | 2023.10.07 |