标题:大佬求助
只看楼主
Ametrin
Rank: 2
等 级:论坛游民
威 望:1
帖 子:9
专家分:26
注 册:2018-8-28
结帖率:100%
已结贴  问题点数:20 回复次数:3 
大佬求助
写的是数组内容,将已知数组拷贝到其它三个数组内,第一个数组是使用带数组表示法的函数;第二个数组是使用带指针表示法和指针递增的函数;第三个是以目标数组名、源数组名和指向源数组最后一个元素后面的元素指针的方法。
现在三种方法得到的答案都有误,以下是程序,还请各位大佬指点:
#include<stdio.h>
void copy_arr( double target1[], double source[], int num );
void copy_ptr( double *target2, double *source, int num );
void copy_ptrs( double *target3, double *start, double *end );
void out_put( double *target, int num);
int main(void)
{
    double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
    double target1[5];
    double target2[5];
    double target3[5];
   
    copy_arr(target1, source, 5);
    copy_ptr(target2, source, 5);
    copy_ptrs(target3, source, source + 5);
    out_put(target1, 5);
    out_put(target2, 5);
    out_put(target3, 5);
   
    return 0;
}
void copy_arr( double target1[], double source[], int num )
{
    int i;
    for(i = 0; i < num; i++)
    {
        target1[i] = source[i];
    }
}
void copy_ptr( double *target2, double *source, int num )
{
    int i;
    for(i = 0; i < num; i++)
    {
        *target2 = *source;
        *target2++;
        *source++;
    }
}
void copy_ptrs( double *target3, double *start, double *end )
{
    while(*start < *end)
    {
        *target3 = *start;
        *start++;
    }
}
void out_put( double *target, int num)
{
    int i;
   
    for(i = 0; i < num; i++)
    {
        printf("%d, ", *target);
        *target++;
    }
    printf("\n");
}
搜索更多相关主题的帖子: void double source int num 
2018-11-15 09:57
Ametrin
Rank: 2
等 级:论坛游民
威 望:1
帖 子:9
专家分:26
注 册:2018-8-28
得分:0 
已解决,新代码如下:
#include<stdio.h>
void copy_arr( double target1[], double source[], int num );
void copy_ptr( double *target2, double *source, int num );
void copy_ptrs( double *target3, double *start, double *end );
void out_put( double *target, int num);
int main(void)
{
    double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
    double target1[5];
    double target2[5];
    double target3[5];
   
    copy_arr(target1, source, 5);
    copy_ptr(target2, source, 5);
    copy_ptrs(target3, source, source + 5);
    out_put(source, 5);
    out_put(target1, 5);
    out_put(target2, 5);
    out_put(target3, 5);
   
    return 0;
}
void copy_arr( double target1[], double source[], int num )
{
    int i;
    for(i = 0; i < num; i++)
    {
        target1[i] = source[i];
    }
}
void copy_ptr( double *target2, double *source, int num )
{
    int i;
    for(i = 0; i < num; i++)
    {
        *target2 = *source;
        *target2++;
        *source++;
    }
}
void copy_ptrs( double *target3, double *start, double *end )
{
    while(*start > *end)
    {
        *target3 = *start;
        *start++;
        *target3++;
    }
}
void out_put( double *target, int num)
{
    int i;
   
    for(i = 0; i < num; i++)
    {
        printf("%1.2lf, ", *target);
        *target++;
    }
    printf("\n");
}
2018-11-15 10:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
1. 数组长度 及 下标 应当用 size_t 类型,而不是 int 类型

2. *target2++;
   *source++;
我猜你想要的只是
   target2++;
   source++;
当然,推荐你用正常的
   ++target2;
   ++source;

3. while(*start > *end)
我猜你想要的是 while(start > end)
2018-11-15 11:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
程序代码:
#include <stdio.h>

void copy_arr( double dst[], const double src[], size_t num );
void copy_ptr( double* dst, const double* src, size_t num );
void copy_ptrs( double* dst, const double* src_begin, const double* src_end );
void out_put( const double* p, size_t num );

int main( void )
{
    double source[5] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
    double target1[5];
    double target2[5];
    double target3[5];

    copy_arr( target1, source, 5 );
    copy_ptr( target2, source, 5 );
    copy_ptrs( target3, source, source+5 );

    out_put( source, 5 );
    out_put( target1, 5 );
    out_put( target2, 5 );
    out_put( target3, 5 );
}

void copy_arr( double dst[], const double src[], size_t num )
{
    for( size_t i=0; i!=num; ++i )
        dst[i] = src[i];
}

void copy_ptr( double* dst, const double* src, size_t num )
{
    for( size_t i=0; i!=num; ++i )
        *dst++ = *src++;
}

void copy_ptrs( double* dst, const double* src_begin, const double* src_end )
{
    for( ; src_begin!=src_end; )
        *dst++ = *src_begin++;
}

void out_put( const double* p, size_t num )
{
    for( size_t i=0; i!=num; ++i )
        printf( "%.2lf, ", p[i] );
    putchar( '\n' );
}
2018-11-15 11:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491290-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.347038 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved