Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have function like this:

void findScarf1(bool ** matrix, int m, int n, int radius, int connectivity); 

and in main function I create 2d dynamic array to pass in this function

    bool matrix[6][7] = {
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 0, 0}
};

The problem is:

findScarf1(matrix, 6, 7, 3, 4);

causes error C2664: 'findScarf1' : cannot convert parameter 1 from 'bool [6][7]' to 'bool **'

How to initialize array compactly(simultaneously with declaration)?

p.s. sorry if it's duplicate question but I've spent 1.5 hours figuring it out

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
205 views
Welcome To Ask or Share your Answers For Others

1 Answer

If you look at how your array is laid out in memory, and compare it how a pointer-to-pointer "matrix" is laid out, you will understand why you can't pass the matrix as a pointer to pointer.

You matrix is like this:

[ matrix[0][0] | matrix[0][1] | ... | matrix[0][6] | matrix[1][0] | matrix[1][1] | ... ]

A matrix in pointer-to-pointer is like this:

[ matrix[0] | matrix[1] | ... ]
  |           |
  |           v
  |           [ matrix[1][0] | matrix[1][1] | ... ]
  v
  [ matrix[0][0] | matrix[0][1] | ... ]

You can solve this by changing the function argument:

bool (*matrix)[7]

That makes the argument matrix a pointer to an array, which will work.


And by the way, the matrix variable you have is not dynamic, it's fully declared and initialized by the compiler, there's nothing dynamic about it.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...