대입 연산자를 특별히 오버라이딩 하지 않은 이상 단순히 대입 연산자로 복사할 수는 없습니다.
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, b[3][4];
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 4; j++)
{
b[i][j] = a[i][j];
}
}반복문을 사용해서 각각 복사하거나, memcpy 등의 함수를 사용해야 합니다.
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, b[3][4];
memcpy(b, a, sizeof(int) * 3 * 4); // sizeof(int) * 3 * 4 대신 그냥 sizeof(a)만 써도 됩니다.단, memcpy로 복사하는 건 진짜 2차원 배열이 아닌, (배열로 쓰이는 포인터)의 배열에 쓰면 안 됩니다.
영 좋은 방법은 아니지만, 2차원 배열을 원소로 갖는 구조체를 만들면 대입 연산자로 복사할 수 있습니다.
struct int3x4
{
int a[3][4];
}
int main()
{
struct int3x4 A = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
struct int3x4 B = A; // 사실 내부적으로는 대입 연산이 12번이나 일어납니다. (...)
return 0;
}하지만 구조체를 대입할 때는 사실 내부적으로는 배열의 모든 원소를 각각 대입하는 끔찍한 방법으로 동작합니다.