어떻게 교환합니까? 예는 다음과 같은 완벽한 프로그램을 참조하십시오
void swapEm (wordType *w1, wordType *w2) {
wordType wx;
memcpy (&wx, w1, sizeof(wx));
memcpy (w1, w2, sizeof(wx));
memcpy (w2, &wx, sizeof(wx));
}
:
이
#include <stdio.h>
#include <string.h>
typedef struct { char * word; int count; } wordType;
void swapEm (wordType *w1, wordType *w2) {
wordType wx;
memcpy (&wx, w1, sizeof(wx));
memcpy (w1, w2, sizeof(wx));
memcpy (w2, &wx, sizeof(wx));
}
void printOne (char *s, wordType *w) {
printf ("%s: %d [%s]\n", s, w->count, w->word);
}
int main(void) {
wordType w1, w2;
w1.word = strdup ("from Pax."); w1.count = 314159;
w2.word = strdup ("Hello"); w2.count = 271828;
printOne ("w1", &w1); printOne ("w2", &w2);
swapEm (&w1, &w2);
puts ("===");
printOne ("w1", &w1); printOne ("w2", &w2);
free (w1.word); free (w2.word);
return 0;
}
그 출력은 다음과 같습니다
w1: 314159 [from Pax.]
w2: 271828 [Hello]
===
w1: 271828 [Hello]
w2: 314159 [from Pax.]
해당 문자열에만주의하십시오. – Anthony
문자열은 괜찮습니다. 포인터 일 뿐이므로 그대로 교체됩니다. 전체 항목의 두 항목을 바꿔 쓰고 있기 때문에 얕은 부분이든 깊은 부분이든 차이가 없습니다. – paxdiablo
그래, 대부분 괜찮을거야. 주위에있는 문자열에 대한 다른 참조를주의하십시오. 뭔가 :'char * s1 = w1.word; 틀림없이, 이런 종류의 일은 삽입 (Insertion) 정렬에서 일어나지 않을 것입니다. 그리고 실제로이 작업을 수행할지 여부는 실제로는 불가능합니다 (예 : w1, &w2); strcpy (s1, "w1")); 오류는 처음에는 스왑 뒤에있는 의도에 따라 다릅니다. – Anthony