2011-10-26 4 views
1

나는 int main[N][N][N]이라는 배열을 가지고 있으며 노드 구조를 만들어야합니다.이 노드 구조는 int buf[N][N]입니다.c 변수가 같거나 memcpy 인 경우

buf = main[index]memcpy(buf,main[index],sizeof(main[index]));은 언제 안전하게 사용할 수 있습니까?

+0

결코 유효하지 않습니다 때문에! –

+2

변수'main'을 호출하는 것이 좋습니다. 귀하의 컴파일러는 실제로 그것을 삼키는가요? – vsz

답변

1

buf가 포인터이고 복사 할 필요가없는 경우 =을 사용하는 것이 안전합니다. buf가 이미 할당 된 배열 또는 포인터 인 경우 복사가 필요한 경우 대개 수행 할 작업 memcpy

2

buf이 배열이면 lvalue가 아닙니다. lvalue가 아닌 경우 (구문 오류)로 지정할 수 없습니다.

0

C의 메모리 연속 부분을 복사하는 경우 요소 복사를 수행하는 것보다 안전하고 훨씬 효율적입니다. memcpy이 잠재적으로 더 빠르기 때문에 다양한 CPU 트릭을 사용하여 기계 단어 크기보다 큰 청크를 복사 할 수 있기 때문입니다. 그러나 항상 그런 것은 아니므로 프로파일 링이 두 가지 옵션을 비교할 수있는 유일한 방법 일 것입니다.

또한, 당신은 아마 루프 기반의 복사본이 아닌 직접 할당에 대한 비교하기위한 것, 배열 변수에 할당 ......... C.

+1

그는 요소 복사를 통해 요소를 수행하지도 않습니다. –

+0

나는이 사실을 반영하기 위해 나의 대답에 ... –

+0

"언제 그렇게하는 것이 안전 할까"라는 문구는 그가 실제로 쓰는 방식을 의미한다고 제안한다. –

관련 문제