10.13-2 数组拷贝

来源:互联网 发布:高要网络问政平台 编辑:程序博客网 时间:2024/05/27 14:14

三种方式实现数组的拷贝
调用如下函数

const double source[SIZE] = { 1.1,2.2,3.3,4.4,5.5 };double target1[SIZE] = { 0 };double target2[SIZE] = { 0 };double target3[SIZE] = { 0 };copy_arr(target1, source, 5);copy_ptr(target2, source, 5);copy_ptrs(target3, source,source+SIZE);

程序示例

/* 10.13.2 */#include<stdio.h>#define SIZE 5void copy_arr(double target1[], const double source[], int m);void copy_ptr(double *target2, const double *source, int m);void copy_ptrs(double *target3, const double *source, const double *end);int main() {    const double source[SIZE] = { 1.1,2.2,3.3,4.4,5.5 };    double target1[SIZE] = { 0 };    double target2[SIZE] = { 0 };    double target3[SIZE] = { 0 };    printf(" the orgin arry:\n ");    for (int i = 0; i < SIZE; i++)        printf("%8.3lf", source[i]);    putchar('\n');    copy_arr(target1, source, 5);    copy_ptr(target2, source, 5);    copy_ptrs(target3, source,source+SIZE);    for (int i = 0; i < SIZE; i++)        printf("%8.3lf ", target3[i]);    putchar('\n');    getchar();    return 0;}void copy_arr(double target1[],const double source[], int m){    printf(" the arry target1:\n");    for (int i = 0; i < m; i++)    {        printf("%8.3lf", target1[i] = source[i]);    }    putchar('\n');}void copy_ptr(double *target2, const double *source, int m){    printf(" the arry target2:\n");    for (int i = 0; i < m; i++)    {        //此处若为 target2+i = source+i 则属于const指针赋予非const指针,是不安全的        //因此,采用对存储在地址的数据值传递的方式进行操作        printf("%8.3lf",*(target2 + i) = *(source + i));    }    putchar('\n');}void copy_ptrs(double *target3, const double *source, const double *end){    printf(" the arry target3:\n");    while (source < end)    {        *target3=*source;        source++;        target3++;    }}