写一个函数用来交换两个整型变量的值
声明
void swap(int a, int b);
方式1
1 2 3 4 5 6
| void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
|
方式2
1 2 3 4 5 6
| void swap(int *a, int *b) { int temp = *a + *b; *a = temp - *a; *b = temp - *b; }
|
方式3
1 2 3 4 5 6
| void swap(int *a, int *b) { *a = *a + *b; *b = *a - *b; *a = *a - *b; }
|
方式4
1 2 3 4 5 6
| void swap(int *a, int *b) { *a = *a - *b; *b = *a + *b; *a = *a - *b; }
|
方式5
1 2 3 4 5 6
| void swap(int *a, int *b) { *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
|
方式6
1 2 3 4 5 6 7
| void swap(int *a, int *b) { *a = *a * *b; *b = *a / *b; *a = *a / *b; } //这种方法只适合小整数,若数值较大会溢出,且乘除法教对比加减效率要低的多
|
方式7(通用型的交换,适合各种类型的变量的交换)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| //思路:只要把存着两个变量的内存交换,就可以了 void swap(void *a, void *b, int length) { void *temp = malloc(sizeof(char) * length); if(temp == NULL){ fprintf(stderr, "the memory is full!\n"); exit(1); } memcpy(temp, a, length); //memcpy函数在string.h中 memcpy(a, b, lengh); memcpy(b, temp, length); free(temp); temp = NULL; }
|