| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 576 人关注过本帖
标题:为何输出的是这样
只看楼主 加入收藏
hummhumm
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-5-14
收藏
 问题点数:0 回复次数:7 
为何输出的是这样
#include<stdio.h>
void pointer1(int x,int y)
{
    int t=1;
        x=x+t;y=y+t;
    return;
}
void pointer2(int *x,int *y)
{
    int t=1;
    *x=*x+t;
    *y=*y+t;
    return;
}
void pointer3(char *p)
{
    p+=2;
    *p=*p+1;
}
void main()
{
    char b[4]={'a','v','w','z'},*pt=b;
    int x=2,y=3;
    pointer1(x,y);
    printf("x=%d y=%d\n",x,y);
    pointer2(&x,&y);
    printf("x=%d y=%d\n",x,y);
    pointer3(pt);
    printf("*(pt+2)=%c \n",*(pt+2));
}
point1(x,y)为何输出的是2,3而不是2,4
pointer3(pt)为何输出的是x  ??
搜索更多相关主题的帖子: 输出 
2008-07-08 07:17
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
point1(x,y)为何输出的是2,3而不是2,4

传的是形参,复制了参数,没有改变原来的参数值;

pointer3(pt)为何输出的是x  ??

+2再+2等于+4,越界,所以输出了奇怪的东西。

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-08 09:53
jasmine_zhou
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-5-5
收藏
得分:0 
回复 1# hummhumm 的帖子
感觉你定义的字符数组有误.如果你想定义一个包含4个字符的数组,必须定义数组的长度为5,因为C语言中,字符串被定义为以空字符结尾的字符序列.
char b[5]={'a','v','w','z','\0'};
为什么输出2,3.这是因为你定义的x,y是局部变量.
仔细看看你的程序,感觉指针*p被初始化有误.应该为
char *pt;
pt=b;

*(pt+2)按程序理解,应该为*(pt+2)=b[2];
b[2]='w';
有因你调用了pointer3(char *p); 所以执行了'w'+1='x',因为w下一个字母是x,所以应输出x

[[it] 本帖最后由 jasmine_zhou 于 2008-7-8 11:33 编辑 [/it]]
2008-07-08 09:59
后飞DE笨鸟
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-7-8
收藏
得分:0 
一楼说的对
2008-07-08 10:40
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:0 
楼上的都搞错了啊.......

pointer3(pt);传递是pt所指向的地址

void pointer3(char *p)
{
    p+=2;
    *p=*p+1;
}
现在p和pt都指向同样的地址,所以pointer3()可以修改pt所指向的地址的值,*p=*p+1;数组的第三个元素改为了'x'.

p+=2;这句只改变了p所指向的地址,并没有改变pt都指向的地址

所以pt还是指向数组的第一个元素

pt+2指向数组的第三个元素

[[it] 本帖最后由 xxwpk007 于 2008-7-8 11:27 编辑 [/it]]
2008-07-08 11:24
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
恩,楼上很好的说明了,pointer1传递的是值,当然没有修改本来变量的值了,pointer3传递的地址,可以改变了*(pt+2)的值为x,但是不能改变pt的指向,只不过是引用了pt的值,既是地址
2008-07-08 13:24
笨鸟学跑
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-7-8
收藏
得分:0 
007说的不错,*P+1其它就是W+1,因为是字符,可以和整型相加,其实就是ASC字符值相加,所以是X,,
不明白可以试下把P+=2;*P=*P+1;改写一下
*P=*(P+1);这句是把第四个元素值赋到第三个了,盖了W
那么输出将是Z,然后再打印出所有的数组元素看下有什么变化
2008-07-08 14:36
a383369542
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-7-8
收藏
得分:0 
程序我们注重思想,数据库我们注重原理,生活我们注重感情。07级程序&&数据库QQ交流群48335578,欢迎志士的加入
2008-07-08 15:42
快速回复:为何输出的是这样
数据加载中...
 
   



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

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