Loop through byte variables?

I was testing out making a 2x2 led matrix and I ended up defining 15 byte variables to represent all 4 bit numbers. The void loop ended up messy. Is there a way to loop through all such variables (n0-n15). I tried putting them into another array, but they merge together and I don’t know how to then send them to the function.

#define col1 12
#define col2 11
#define row1 10
#define row2 9

const byte rows[] = {
  row1, row2
};

const byte col[] = {
  col2, col1
};

byte n0[2] = {B00, B00};
byte n1[2] = {B00, B01};
byte n2[2] = {B00, B10};
byte n3[2] = {B00, B11};
byte n4[2] = {B01, B00};
byte n5[2] = {B01, B01};
byte n6[2] = {B01, B10};
byte n7[2] = {B01, B11};
byte n8[2] = {B10, B00};
byte n9[2] = {B10, B01};
byte n10[2] = {B10, B10};
byte n11[2] = {B10, B11};
byte n12[2] = {B11, B00};
byte n13[2] = {B11, B01};
byte n14[2] = {B11, B10};
byte n15[2] = {B11, B11};

int dt = 50;


void setup() {
  // put your setup code here, to run once:

  pinMode(row2, OUTPUT);
  pinMode(row1, OUTPUT);
  pinMode(col2, OUTPUT);
  pinMode(col1, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  drawScreen(n0);
  delay(dt);
  drawScreen(n1);
  delay(dt);
  drawScreen(n2);
  delay(dt);
  drawScreen(n3);
  delay(dt);
  drawScreen(n4);
  delay(dt);
  drawScreen(n5);
  delay(dt);
  drawScreen(n6);
  delay(dt);
  drawScreen(n7);
  delay(dt);
  drawScreen(n8);
  delay(dt);
  drawScreen(n9);
  delay(dt);
  drawScreen(n10);
  delay(dt);
  drawScreen(n11);
  delay(dt);
  drawScreen(n12);
  delay(dt);
  drawScreen(n13);
  delay(dt);
  drawScreen(n14);
  delay(dt);
  drawScreen(n15);
  delay(dt * 2);

  Serial.println("done");
}

void  drawScreen(byte buffer1[]) {
  for (int b = 0; b < 100; b++) {
    for (byte i = 0; i < 2; i++)
    {
      digitalWrite(rows[i], HIGH);    //turn on row
      for (byte a = 0; a < 2; a++)
      {
        digitalWrite(col[a], (~buffer1[i] >> a) & 0x01); // turn on col
        delay(1);
        digitalWrite(col[a], HIGH);      // reset col
      }
      digitalWrite(rows[i], LOW);     // reset row
    }
  }
}

you can use a 2 dimensional array

byte n[16][2] = { {B00, B00}, {B00, B01}, etc };


for (byte i=0; i <16; i++) {
  drawScreen(n[i]);
  delay(dt);
}

and if you reverse the order of the indices you save a lot of ‘{’ 's

Deva_Rishi:
you can use a 2 dimensional array

byte n[16][2] = { {B00, B00}, {B00, B01}, etc };

for (byte i=0; i <16; i++) {
  drawScreen(n[i]);
  delay(dt);
}


and if you reverse the order of the indices you save a lot of '{' 's

Oh ya. I had a brain fart, I guess. Ya that makes sense, thanks.