| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:输出数组元素,输出结果错误
只看楼主 加入收藏
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
输出数组元素,输出结果错误
程序代码:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 *初始化一个数组,将数组内容复制到另外两个数组中

 *第一份拷贝使用数组下标,第二份拷贝使用指针增量操作,把目标数组名和要复制的元

 *素数目作为参数传递给函数

 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 */

#include <stdio.h>
#define SIZE 5

void copy_index(double source[],double target[],int arrLen);
void copy_pointer(double *source,double *target,int arrLen);
void print_array(double array[],int arrLen);

int main(void)
{
    double source[SIZE]={1.1,2.2,3.3,4.4,5.5};
    double target1[SIZE];
    double target2[SIZE];
    
    copy_index(source,target1,SIZE);
    copy_pointer(source,target2,SIZE);
    print_array(target1,SIZE);
    print_array(target2,SIZE);
    
    return 0;
}

void copy_index(double source[],double target[],int arrLen)
{
    int i;
    
    for(i=0;i<arrLen;i++)
        target[i]=source[i];
}

void copy_pointer(double *source,double *target,int arrLen)
{
    int i;
    
    for(i=0;i<arrLen;i++){
        *target++=*source++;
        printf("By copy_pointer: Target[%d] = %.1f.\n",i,*target);
    }
}

void print_array(double array[],int arrLen)
{
    int i;
        
    for(i=0;i<arrLen;i++)
        printf("By Pointer: Target[%d] = %.1f.\n",i,*array++);
}

输出结果:
By copy_pointer: Target[0] = 0.0.
By copy_pointer: Target[1] = 5715102993279205789256153893914470542232112909384201926228276125698620488519110470997992189482283978356249466410566275192091273279460128355956028825434645840958782393875580439971946718728990551972880532157655305269667042594652160.0.
By copy_pointer: Target[2] = 0.0.
By copy_pointer: Target[3] = 0.0.
By copy_pointer: Target[4] = 0.0.
By Pointer: Target[0] = 1.1.
By Pointer: Target[1] = 2.2.
By Pointer: Target[2] = 3.3.
By Pointer: Target[3] = 4.4.
By Pointer: Target[4] = 5.5.
By Pointer: Target[0] = 1.1.
By Pointer: Target[1] = 2.2.
By Pointer: Target[2] = 3.3.
By Pointer: Target[3] = 4.4.
By Pointer: Target[4] = 5.5.

谢谢。
搜索更多相关主题的帖子: 元素 目标 
2012-01-05 15:12
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
收藏
得分:7 
晕啊,你不该在函数里使用打印命令啊,因为指针已经移动了,但还没有赋值,去掉
printf("By copy_pointer: Target[%d] = %.1f.\n",i,*target);
这一句就可以了,程序没有其他问题。
2012-01-05 16:42
driftsand
Rank: 2
等 级:论坛游民
帖 子:25
专家分:85
注 册:2011-12-21
收藏
得分:13 
你可以把函数稍作改动就可以,试试下面的。

void copy_pointer(double *source,double *target,int arrLen)
{
    int i;
   
    for(i=0;i<arrLen;i++){
        *target=*source;
        printf("By copy_pointer: Target[%d] = %.1f.\n",i,*target);
        target++;
        source++;
    }
}

Don't tell lies because those who believe your lies are the ones who believe in you.
2012-01-05 17:27
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 2楼 hengde_li
在函数copy_pointer()中,打印之前*target++=*source++;语句已经赋过值了,打印命令中的*target应该就是取此时指针target指向位置中的数值啊。
为什么会没有赋值呢?
请教。

明察、慎思、笃行
2012-01-05 17:32
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 3楼 driftsand
谢谢了。
现在明白了,由于当*target++=*source++;语句执行过之后,target和source的指针都加1,所以在打印命令中target指向的位置是已经赋值的元素的下一位置,所以此时没有值,仍然是空的。

明察、慎思、笃行
2012-01-05 17:39
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
收藏
得分:0 
回复 2楼 hengde_li
现在明白了,由于当*target++=*source++;语句执行过之后,target和source的指针都加1,所以在打印命令中target指向的位置是已经赋值的元素的下一位置,所以此时没有值,仍然是空的。

明察、慎思、笃行
2012-01-05 17:40
快速回复:输出数组元素,输出结果错误
数据加载中...
 
   



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

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