Problem understanding code

Hi, I am busy learning the arduino language and I am stuck on a piece of coding that do not fully undestand. The code is as follows:

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int currentNumber = 0;


long codes[12] =     
{
 0xFD30CF, 0xFD08F7, // 0 ,1
 0xFD8877, 0xFD48B7, // 2 ,3
 0xFD28D7, 0xFDA857, // 4 ,5
 0xFD6897, 0xFD18E7, // 6 ,7
 0xFD9867, 0xFD58A7, // 8 ,9
 0xFD20DF, 0xFD609F,
};

int number[10][8] =
{
 {0, 0, 0, 1, 0, 0, 0, 1}, //0 
 {0, 1, 1, 1, 1, 1, 0, 1}, //1       
 {0, 0, 1, 0, 0, 0, 1, 1}, //2
 {0, 0, 1, 0, 1, 0, 0, 1}, //3
 {0, 1, 0, 0, 1, 1, 0, 1}, //4
 {1, 0, 0, 0, 1, 0, 0, 1}, //5
 {1, 0, 0, 0, 0, 0, 0, 1}, //6
 {0, 0, 1, 1, 1, 1, 0, 1}, //7
 {0, 0, 0, 0, 0, 0, 0, 1}, //8
 {0, 0, 0, 0, 1, 1, 0, 1}, //9
};

void numberShow(int i) {
 for (int pin = 2; pin <= 9; pin++) {     
   digitalWrite(pin, number[i][pin - 2]);   
 }
}

void setup() {
 Serial.begin(9600);
 irrecv.enableIRIn();                

 for (int pin = 2; pin <= 9; pin++) {
   pinMode(pin, OUTPUT);
   digitalWrite(pin, LOW);            
 }
}

void loop() {
 
 if (irrecv.decode(&results)) {    
   for (int i = 0; i <= 11; i++) {
     if (results.value == codes[i] && i <= 9) {
       numberShow(i);
       currentNumber = i;
       Serial.println(i);
       break;
     }
     else if (results.value == codes[10] && currentNumber != 0) {
       currentNumber--;
       numberShow(currentNumber);
       Serial.println(currentNumber);
       break;
     }
   }
   Serial.println(results.value, HEX);
   irrecv.resume();
 }
}

I am refering spesifically to this bit:

if (irrecv.decode(&results)) {    
   for (int i = 0; i <= 11; i++) {
     if (results.value == codes[i] && i <= 9) {
       numberShow(i);
       currentNumber = i;
       Serial.println(i);
       break;

----> I want to know what does irrecv.decode(&results)) mean and what does the & before results exactly do

Thank you

You have posted code without using code tags. This creates certain problems and obstacles for other forum members. The code tags make the code look

like this

when posting source code files. It makes it easier to read, and can be copied with a single mouse click.
If you have already posted without using code tags, open your message and select "modify" from the pull down menu labelled, "More", at the lower left corner of the message. Highlight your code by selecting it (it turns blue), and then click on the "</>" icon at the upper left hand corner. Click on the "Save" button. Code tags can also be inserted manually in the forum text using the [code] and [/code] metatags.

When you are finished that, please read these two posts:

How to use this forum - please read.
and
Read this before posting a programming question ...

and then Google "C++ address operator".

irreceive.decode() is expecting a pointer to... whatever it is you have to pass it. The & before "results" tells it you're passing the pointer to results.

Google for information about working with pointers for more details, though you don't need to know most of it, most of the time in Arduino.

The '&' is the unary "address of" operator. Most of the time, you are using the value of the variable as it is stored in memory. The '&' operator allows you to determine the memory address of where that variable resides in memory. For some additional information, see:

More generally, what they are up to is "passing by reference". It's like handing decode() a bucket, and saying, "fill it with something". Instead of just handing it something.