C语言拷贝数组的一个方法
#include <stdio.h>
#define PRINT_ARRY(a) \
do { \
printf("NiHao arrycopy:" #a "[]:"); \
for (size_t i = 0; i < sizeof(a) / sizeof(a[0]); i++) { \
printf("%0.1f,", a[i]); \
} \
puts(""); \
} while (0)
#define arrycopy(a1, a2, x, type) \
do { \
typedef struct { \
type data[x]; \
} * arry_p; \
(*(arry_p)a1) = (*(arry_p)a2); \
} while (0)
#define type float
type a1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
type a2[11] = {0};
type a3[11] = {0};
struct {
type d;
type d1;
type d2;
type d3;
type d4;
type d5;
} a4 = {10, 11, 12, 13, 14, 15};
int main() {
PRINT_ARRY(a1);
PRINT_ARRY(a2);
arrycopy(a2, a1, 10, type);
puts("arrycopy(a2, a1, 10, type)\n"
"copy after:");
PRINT_ARRY(a1);
PRINT_ARRY(a2);
arrycopy(a2, a3, 10, type);
arrycopy(a2, a1, 5, type);
puts("arrycopy(a2, a3, 10, type)\n"
"arrycopy(a2, a1, 5, type)\n"
"copy after:");
PRINT_ARRY(a1);
PRINT_ARRY(a2);
arrycopy(&a2[5], &a4, 6, type);
puts("arrycopy(&a2[5], &a4, 6, type)\n"
"copy after:");
PRINT_ARRY(a2);
return 0;
}