, 당신은 할 수 없습니다
newBoard = &dirtyBoard;
그러나 위의 구문은 다음과 같이 작동합니다 :
그러나
int newBoard[9][9];
int* dirtyBoard;
int i, j;
for(i = 0; i < 9; ++i)
for(j = 0; j < 9; ++i)
newBoard[i][j] = i*j;
dirtyBoard = newBoard;
, 당신은 복사되지 않습니다, 당신은 효과적으로하고 있습니다 별명. 포인터의 값을 업데이트하면 기본 배열을 업데이트하고 그 반대로도 업데이트합니다.
당신이 포인터를 통해 배열을 편집 할 경우에 당신은 이런 종류의 수행 할 수 있습니다
#define cols 9
#define rows 9
...
int n;
int newBoard[rows][cols];
int* dirtyBoard;
int i, j;
int row = 3;
int col = 5;
dirtyBoard[row * cols + col] = 3; /* to flip from 1 dimensional ptr -> [][] form */
당신의 정의 사용할 필요가 없습니다 ++ C로 사용할 수 있습니다 :
const int rows = 9; // and use as array dimensions.
그러나 이것은 각 요소를 추가하는 for 루프와 같은 것이 아닙니까? 어쩌면 조금 더 효율적이지만 본질적으로 같은 것일까요? newBoard가 호출 될 때 dirtyBoard가 실제로 참조되는 것을 변수로 리디렉션하기를 정말로 바랬습니다. – user1695505
결과는 같습니다. 예. 복사본을 원했어. 동일한 배열을 가리키면 복사본이 생성되지 않습니다. – this
@self. 호기심, "거의 정확히"는 그들이 여전히 다른 것을 의미합니까? 거기에 무엇이 남아 있습니까? 미리 감사드립니다. – Unheilig