| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1172 人关注过本帖
标题:指针程序 哪里有错
只看楼主 加入收藏
aoaoaoao
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-5-14
收藏
得分:0 

1.函数没有原型
2.giveout()函数没有返回值.

3.作为局部变量的数组a中各元素的初始值不能保证不是0,


4.注意p值++后的变化.

5 注意主函数main函数的写法. int main(void)
{
.........
return 0;
}

2007-10-10 22:38
目标→C魂
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-10-10
收藏
得分:0 

楼上的都很强,


...因为鄙视而存在,为了鄙视而奋斗.
2007-10-11 12:24
wooginluers
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-10-10
收藏
得分:0 

我修改的,编译运行通过了,大伙看看还有错误没
#include<stdio.h>
int main(void)
{
int a[3],*p,i=0;
printf("Please input 3 interger:");
for(p=a;i<3;i++)
{ scanf("%d",p);
p++;}
giveout(a,3);
}

int giveout(int *p,int n)
{int i,temp,*s;
/*s=p;*/
for(i=0;i<n-1;i++)
{if(*p>*(p+1))
{temp=*(p+1);
*(p+1)=*p;
*p=temp;
}
p++;
}

for(i=0;i<n;i++,--p)
printf("%d\t",*p);
return(0);
}

2007-10-11 14:18
zhao9302
Rank: 1
等 级:新手上路
帖 子:170
专家分:0
注 册:2007-5-10
收藏
得分:0 

#include<stdio.h>
main()
{
int a[3],*p,i;
printf("Please input 3 interger:");
for(p=a,i=0;i<3;p++,i++)
scanf("%d",p);
giveout(a,3);
}

int giveout(int *p,int n)
{int i,temp,j;
for(j=0;j<n-1;j++,p++)
{if(*p>*(p+1))
{temp=*p;
*(p+1)=*p;
*p=temp;
}
}

for(i=0;i<n;i++,p--)
printf("%d\t",p);


return 0;
}

这个好像和楼上是一样的代码把
为啥就是没办法运行出结果


我要一步一步往上爬……
2007-10-11 15:13
zhao9302
Rank: 1
等 级:新手上路
帖 子:170
专家分:0
注 册:2007-5-10
收藏
得分:0 

刚又发现个问题 13楼 函数没定义咋过的?
#include<stdio.h>

int giveout(int *p,int n)
{int i,temp,j;
for(j=0;j<n-1;j++,p++)
{if(*p>*(p+1))
{temp=*p;
*(p+1)=*p;
*p=temp;
}
}

for(i=0;i<n;i++,p--)
printf("%d\t",p);


return 0;
}

main()
{
int a[3],*p,i;
printf("Please input 3 interger:");
for(p=a,i=0;i<3;p++,i++)
scanf("%d",p);
giveout(a,3);
}


我要一步一步往上爬……
2007-10-11 15:18
wooginluers
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-10-10
收藏
得分:0 

楼上的,看清楚了。你的错误在于
#include<stdio.h>

int giveout(int *p,int n)
{int i,temp,j;
for(j=0;j<n-1;j++,p++)
{if(*p>*(p+1))
{temp=*p;
*(p+1)=*p;
*p=temp;
}
}

for(i=0;i<n;i++,p--)/* p 的值自增发生了变化。这时p已经指向了 数组最后一个元素的下一个地址。必须使用--p,先减一,让它指向数组最后一个元素。
printf("%d\t",p);
return 0;
}

main()
{
int a[3],*p,i;
printf("Please input 3 interger:");
for(p=a,i=0;i<3;p++,i++)
scanf("%d",p);
giveout(a,3);
}
我的函数在下面定义过了。放上放下面是没有区别的!

2007-10-11 16:21
zhao9302
Rank: 1
等 级:新手上路
帖 子:170
专家分:0
注 册:2007-5-10
收藏
得分:0 

哦 谢谢咯

但是你在那个地方修改的 p-- 和 --p 应该没有什么区别把?

[此贴子已经被作者于2007-10-11 17:34:05编辑过]


我要一步一步往上爬……
2007-10-11 17:31
wooginluers
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-10-10
收藏
得分:0 

当然有区别。p--是指先运算再自减,--p是先自减再运算。

2007-10-11 23:37
zhao9302
Rank: 1
等 级:新手上路
帖 子:170
专家分:0
注 册:2007-5-10
收藏
得分:0 

可是上面那段程序

for(i=0;i<n;i++,p--)
printf("%d\t",p);

实际上就是


for(i=0;i<n;i++)
{printf("%d\t",p);
p--;
}

这个地方 p-- 和 --p 是没区别的亚


我要一步一步往上爬……
2007-10-11 23:52
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 
上面的没区别,你的问题在
for(i=0;i<n;i++,p--)
printf("%d\t",p);//你的意思应该是输出里面的3个数吧,你却输出的是p指针的值,应该是*P;

还有你的这个程序是要将你输入的3个整数,从小到大排列吗?如果是那个意思
for(j=0;j<n-1;j++,p++)
{if(*p>*(p+1))
{temp=*p;
*(p+1)=*p;
*p=temp;
}
这个就错了,这段只负责找出最大的数放在最 a[2].

楼主,为什么要用指针把简单的程序搞的这么复杂列?
2007-10-12 17:04
快速回复:指针程序 哪里有错
数据加载中...
 
   



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

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