Tuesday, June 07, 2005

C++ reference to an array

A number of years ago I remember learning how to pass a reference to an array of fixed size to a function in C++. The C++ Primer by Stan Lippman and Josee Lajoie discuss how to do this in section 7.3 (Functions - Argument Passing). It looks like this:

void foo(int (&refArr)[10])
size_t size = sizeof(refArr); // returns 10*sizeof(int)

Today Jonathan asked how to return a reference to an array of fixed size. I took a quick look at the spec and saw that returning a reference to an array is allowed, but I couldn't find how.

Well, it turns out that is looks like this:

const int (&getArray() const)[10]
return array_;



Anonymous said...

Total fun!! :++)

Marina said...


i just.. :++) while(TRUE)

ps. thanx for this post, i was looking actually for the reference to array as a parameter

Anonymous said...

Awesome, I was looking for this too. Make me question the code I'm writing ;)

Carl said...

Thanks for this. Say I have a reference to an nxn matrix. Is it possible to create a reference to an matrix (n/2)x(n/2) from it? I'm thinking of using this technique to construct hadamard matrices

Kevin Heifner said...

No. The array is contiguous in memory and therefore the (n/2)x(n/2) array would be slices.

GiM said...

Hi there, thanks for this explanation!

Saurav Deb Purkayastha said...

Thanks a lot for the post. I had been stuck at a program in which I was trying to reference an array. Your method worked. Now my program is done. Again thanks a lot!!!!!!!!!!!!!!

manuell said...

Many thanks to you, and to Google!

SEO Freelance said...

Whoa! Thanks for this. You simply enlighten me about references to array. I can now answer my assignment in school. Keep it up.

a1 said...

Thanks for this useful knowledge.

Gabriel Frâncu said...


to understand how to read that

Lei Yi said...

hi, where can I find the standard's description to "reference to fixed-size array" and "the syntax of return a array reference"? thanks.

Lei Yi said...
This comment has been removed by the author.
Kevin Heifner said...

The syntax for a reference to an array can be found in the standard at 8.5.3 References.

ChriSopht said...

You can slightly improve the syntax by a typedef:

struct Test {
  typedef int Array10[10];
  Array10 array;
  const Array10& getArray() const { return array;}