nRF24L01 pipe addresses and multi-dimensional arrays

This is a rather fundamental question which I should not be grappling with but somehow am getting confused. And, since the code (which I am asking this question about) is from an example sketch (MulticeiverDemo.ino from the RF24 library by TMRh20) it surely can't be wrong.

Here's my confusion:

The pipe addresses are defined in a multi-dimensional array as below:

uint8_t address[6][5] = { { 0x78, 0x78, 0x78, 0x78, 0x78 },
                          { 0xF1, 0xB6, 0xB5, 0xB4, 0xB3 },
                          { 0xCD, 0xB6, 0xB5, 0xB4, 0xB3 },
                          { 0xA3, 0xB6, 0xB5, 0xB4, 0xB3 },
                          { 0x0F, 0xB6, 0xB5, 0xB4, 0xB3 },
                          { 0x05, 0xB6, 0xB5, 0xB4, 0xB3 } };

Then the pipes are opened for reading in a loop like so:

    for (uint8_t i = 0; i < 6; ++i)
      radio.openReadingPipe(i, address[i]);

Given that the second parameter should be of type uint8_t, and address[i] should give an array of values, how does this work?

No, this is incorrect.
Multidimension array is array of arrays, so every element of it is array itself. Array of uint8_t has a pointer type - uint8_t*, exactly as expected in openReadingPipe() method.

Did I answer the question?

it's a 2D array, address[i] is an array of five uint8_t, and in C/C++, when an array is passed to a function, it’s automatically converted to a pointer to its first element.

Here, when passed to radio.openReadingPipe(), in the body of the function, address[i] is implicitly treated as a uint8_t* pointing to address[i][0]

The doc only mentions a prototype being

void RF24::openReadingPipe(uint8_t number, uint64_t address);	

so that seems bizarre that it would work but if you look at the source code you'll see there is a second API

void openReadingPipe(uint8_t number, const uint8_t* address);

that's why it works.

Oh, this totally clarifies. Thank you both @b707 and @J-M-L.