当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 输出数组元素,输出结果错误(已解决)
帖子发表于 : 2012-01-05 13:30 
头像

注册: 2007-11-02 13:46
帖子: 970
送出感谢: 0 次
接收感谢: 1
代码:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *初始化一个数组,将数组内容复制到另外两个数组中
 *第一份拷贝使用数组下标,第二份拷贝使用指针增量操作,把目标数组名和要复制的元
 *素数目作为参数传递给函数
 *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */

#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++;
        //经过上述语句之后,被赋值的是target,赋值之后target变为target+1,而target+1仍为空值
        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.

谢谢。


_________________
明察,慎思,笃行


最后由 renxinzhi 编辑于 2012-01-05 19:45,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 输出数组元素,使用索引值输出错误,使用指针输出正确
帖子发表于 : 2012-01-05 14:11 

注册: 2012-01-05 14:07
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
void copy_pointer(double *source,double *target,int arrLen)
{
int i;

for(i=0;i<arrLen;i++){
*target++=*source++;
printf("By Index: Target[%d] = %.1f.\n",i,target[i]);//这里出错
}
}
target 既然已经++了后面再用target[i]当然出问题了。直接用 *target
后面的错是一样的


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 输出数组元素,使用索引值输出错误,使用指针输出正确
帖子发表于 : 2012-01-05 14:36 
头像

注册: 2007-11-02 13:46
帖子: 970
送出感谢: 0 次
接收感谢: 1
wishstudio 写道:
void copy_pointer(double *source,double *target,int arrLen)
{
int i;

for(i=0;i<arrLen;i++){
*target++=*source++;
printf("By Index: Target[%d] = %.1f.\n",i,target[i]);//这里出错
}
}
target 既然已经++了后面再用target[i]当然出问题了。直接用 *target
后面的错是一样的

谢谢,经过指点我意识到这一点了。
不过,将这里的索引值target[i]改为指针*target后,仍然错误,不知为何。
代码:
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);
    }
}

引用:
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.


_________________
明察,慎思,笃行


最后由 renxinzhi 编辑于 2012-01-05 15:01,总共编辑了 2 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: 输出数组元素,使用索引值输出错误,使用指针输出正确
帖子发表于 : 2012-01-05 14:38 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
指针和数组,混合使用哦。 :em04
一段里面,要不都指针,要不都数组,不容易出错。


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 输出数组元素,使用索引值输出错误,使用指针输出正确
帖子发表于 : 2012-01-05 15:03 
头像

注册: 2007-11-02 13:46
帖子: 970
送出感谢: 0 次
接收感谢: 1
eexpress 写道:
指针和数组,混合使用哦。 :em04
一段里面,要不都指针,要不都数组,不容易出错。

刚刚开始学,经过这个例子,现在体会到了混用的问题严重性了。


_________________
明察,慎思,笃行


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 输出数组元素,输出结果错误
帖子发表于 : 2012-01-05 19:24 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
数组和指针,搞得地方在于声明一个符号为数组和声明其为指针,编译器需要为前者做个薄记工作,两者用sizeof看是不一样的,但是在函数声明的时候,函数参数两者是不区分的,比如你的void copy_index(double source[],double target[],int arrLen)和这个声明void copy_index(double* source,double* target,int arrLen)是等效的。


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 输出数组元素,输出结果错误
帖子发表于 : 2012-01-05 19:42 
头像

注册: 2007-11-02 13:46
帖子: 970
送出感谢: 0 次
接收感谢: 1
tangboyun 写道:
数组和指针,搞得地方在于声明一个符号为数组和声明其为指针,编译器需要为前者做个薄记工作,两者用sizeof看是不一样的,但是在函数声明的时候,函数参数两者是不区分的,比如你的void copy_index(double source[],double target[],int arrLen)和这个声明void copy_index(double* source,double* target,int arrLen)是等效的。

这一点我也知道,函数使用数组跟指针一样,都是传递数组名,数组名就是数组的首地址,而指针指向的就是数组的首地址。我这里这样写是想在形式上有所区别,使得copy_pointer()在形式上看起来更像指针,而copy_index()在形式上看起来更像仅此使用数组的下标,仅此而已。


_________________
明察,慎思,笃行


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 0 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译