2

I get error in compilation with the following definition.

int  matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };

char str[ ][ ] = { "abc", "fgh" };

Why is the compiler complaining missing subscript and too many initializers.

4 Answers 4

8

If an array is defined as int arr[ ROWS ][ COLS ]; then any array notation arr[ i ][ j ] can be translated to pointer notation as

*( arr + i * COLS + j )

Observe that the expression requires only COLS, it does not require ROWS. So, the array definition can be written equivalently as

int arr [][ COLS ];

But, missing the second dimension is not acceptable.

Further understanding can be achieved by following the three examples given below. In all three examples, the same array notation arr[ 2 ][ 3 ] is translated to pointer notation.

  • Between A and B, ROWS is same but COLS is different; result = pointer notation is different.

  • Between A and C, ROWS is different but COLS is same; result = pointer notation is same.

Examples:

A. int arr[ 4 ][ 7 ];      arr[2][3] = arr + 2 * 7 + 3 = arr + 17
B. int arr[ 4 ][ 5 ];      arr[2][3] = arr + 2 * 5 + 3 = arr + 13
C. int arr[ 6 ][ 7 ];      arr[2][3] = arr + 2 * 7 + 3 = arr + 17
Sign up to request clarification or add additional context in comments.

Comments

7

When you declare a multi-dimensional array, you must explicitly define the size of all but the last dimension. Otherwise, the compiler won't know how to find a given value in the array.

edit: read my post here

2 Comments

any idea why can't the compiler calculate the size by counting the number of elements from the initializer list before allocating.
I explain it in the other post that I linked to.
0

int matrix[2][3] = { { 1, 2, 3}, {4,5,6} };
char str[2][4] = { "abc", "fgh" };

the first declaration will make 2d int array has 2 rows with 3 col.
the second will make 2d char array with 2 rows and 4 col. the 4th element in each row in the char array is the NULL char

Comments

0

Try

include <string>

and

string str[] = { "abc", "fgh" };

1 Comment

This might need a " after "abc, and a ; at the end.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.