// Un struct se copia completo, aunque tenga un arreglo adentro.
#include <stdio.h>

struct row {
    int size;
    int cells[3];
};

void change_copy(struct row r) {
    r.cells[0] = 99;
    printf("en change_copy: cells[0] = %d\n", r.cells[0]);
}

struct row changed(struct row r) {
    r.cells[0] = 99;
    return r;
}

void change_cells(int cells[]) {
    cells[1] = 77;
}

int main(void) {
    struct row a = {3, {1, 2, 3}};

    change_copy(a);
    printf("en main: cells[0] = %d\n", a.cells[0]);

    struct row b = changed(a);
    printf("a: %d, b: %d\n", a.cells[0], b.cells[0]);

    change_cells(a.cells);
    printf("a.cells[1] = %d\n", a.cells[1]);
    return 0;
}
