Extending the above, all 4 functions bellow declare and initialize the same array int arr[3][3]
differently:
#include <stdio.h>
void arr2_list2(void) {
int arr[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
printf("int arr[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}:\n");
for (int i = 0; i < 3; ++i)
printf("%d %d %d\n", arr[i][0], arr[i][1], arr[i][2]);
return 0;
}
void arr2_list1(void) {
int arr[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
printf("int arr[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}:\n");
for (int i = 0; i < 3; ++i)
printf("%d %d %d\n", arr[i][0], arr[i][1], arr[i][2]);
return 0;
}
void arr2open_list2(void) {
int arr[][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
printf("int arr[][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}:\n");
for (int i = 0; i < 3; ++i)
printf("%d %d %d\n", arr[i][0], arr[i][1], arr[i][2]);
return 0;
}
void arr2open_list1(void) {
int arr[][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
printf("int arr[][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}:\n");
for (int i = 0; i < 3; ++i)
printf("%d %d %d\n", arr[i][0], arr[i][1], arr[i][2]);
return 0;
}
int main(void) {
arr2_list2();
arr2_list1();
arr2open_list2();
arr2open_list1();
return 0;
}
// int arr[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}:
// 0 1 2
// 3 4 5
// 6 7 8
// int arr[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}:
// 0 1 2
// 3 4 5
// 6 7 8
// int arr[][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}:
// 0 1 2
// 3 4 5
// 6 7 8
// int arr[][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}:
// 0 1 2
// 3 4 5
// 6 7 8
Imaging int arr[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
is allowed, why would not int arr[][] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
be allowed then, but how can the compiler decide what a human means in the statement
int arr[][] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
int arr[1][9],
or int arr[3][3]
, or int arr[9][1]
?