| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 345 人关注过本帖
标题:帮我看看这个程序
只看楼主 加入收藏
scott_dw
Rank: 2
等 级:论坛游民
帖 子:35
专家分:52
注 册:2011-8-30
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:5 
帮我看看这个程序
程序代码:
/*
    目的:将指定范围元素复制到指定数组中。
*/

#include<stdio.h>

void copy_ptr(double *,double *,int);
int main(void)
{
    double source[8]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8};
    double target[3];//目标函数
    //int i;
    copy_ptr(&source[2],target,3);//把源数组的第3-5个元素复制到target。传递第三个元素的地址,目标函数的地址,以及复制元素数目
    return 0;
}


void copy_ptr(double *source,double * target,int n)
{
    int i;
    for(i=0;i<n;i++)
        *target++=*source++;
    for(i=0;i<3;i++)
        printf("%.2lf ",*target++);
    putchar('\n');
        
}


执行结果不是从source[2]开始复制,而是从头复制。
如果把输出函数 for(i=0;i<3;i++)
        printf("%.2lf ",*target++);
    putchar('\n');
放到main中,会出错
这是怎么回事?谢谢。
搜索更多相关主题的帖子: color 元素 
2011-09-03 14:32
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
收藏
得分:15 
程序代码:
#include"stdio.h"
void copy_ptr(double *,double *,int);
int main(void)
{
    double source[8]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8};
    double target[3];//目标函数
    //int i;
    copy_ptr(&source[2],target,3);//把源数组的第3-5个元素复制到target。传递第三个元素的地址,目标函数的地址,以及复制元素数目
    return 0;
}


void copy_ptr(double *source,double * target,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        *(target+i)=*source;//target的值不要改变,如果改变要记得指回开头。
        source++;
    }

    for(i=0;i<3;i++)
    {
        printf("%.2lf ",*target);
        target++;
    }
    putchar('\n');
        
}

一个单片机就让我头疼不已~~~
2011-09-03 15:14
scott_dw
Rank: 2
等 级:论坛游民
帖 子:35
专家分:52
注 册:2011-8-30
收藏
得分:0 
回复 2楼 dreamofgod
恩,对!
那如果把 for(i=0;i<3;i++)
    {
        printf("%.2lf ",*target);
        target++;
    }
    putchar('\n');
这部分放入主函数中是错误的,就是因为在主函数中,target是个常量,不能自加运算了?
2011-09-03 15:25
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:5 
target是指针常量,不是指针变量,不能自增。修改后,把target声明为指针变量,就可以了。

[ 本帖最后由 pauljames 于 2011-9-3 18:58 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-03 18:56
hanxiaokun
Rank: 2
等 级:论坛游民
帖 子:44
专家分:56
注 册:2011-8-31
收藏
得分:0 
在上楼的说法中是不正确的吧,target也是指针变量,
你的程序之所以没有输出正确的结果是因为在输出的时候你没有把target指回开头,正像2楼所说,又因为你在主函数中
定义的target[3]为三个数组元素,所以当他超出这个数组的时候他会自动指向souce[8]的开头,然后输出三位数,
所以你看到的结果是从头复制输出的现象,至于为什么会自动指向souce[8]的开头我也不太清楚,要请真正的高手出来给个
说法了

[ 本帖最后由 hanxiaokun 于 2011-9-7 13:31 编辑 ]
2011-09-07 12:44
scott_dw
Rank: 2
等 级:论坛游民
帖 子:35
专家分:52
注 册:2011-8-30
收藏
得分:0 
回复 5楼 hanxiaokun
哦,不好意识。我想这个程序在命名上有些问题。
在主函数中的申明是:target[];所以target是个常量,而在下面的函数中,target做为形参,申明的是个指针变量。也就是,他们两个的作用域不同。
所以在主函数中,用target++是不对的。
所以我觉得这次在变量,常量的命名上不好,容易混。

[ 本帖最后由 scott_dw 于 2011-9-9 09:25 编辑 ]
2011-09-09 09:24
快速回复:帮我看看这个程序
数据加载中...
 
   



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

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