| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 513 人关注过本帖
标题:[求助]还是指针.再看(晕)
只看楼主 加入收藏
darklily
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-5-16
收藏
 问题点数:0 回复次数:6 
[求助]还是指针.再看(晕)
#include "stdio.h"
main()
{
int n,i,num[50];
int *p=num;
printf("\nInput the person's number:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
*p=(i+1);
p++;
}
for(i=0;i<n;i++)
{
printf("%3d",*p);
p++;
}
}

上面的代码和下面的有什么区别?
#include "stdio.h"
main()
{
int n,i,num[50];
int *p=num;
printf("\nInput the person's number:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
*(p+i)=(i+1);
}
for(i=0;i<n;i++)
{
printf("%3d",*p);
p++;
}
}

第一个代码的结果是正确的第二个是错的
搜索更多相关主题的帖子: include 
2007-05-22 09:41
gaover
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-5-17
收藏
得分:0 
效果是一样的 可能在效率方面有点不同.

鲜花会凋零,容貌会衰老,世间万物唯勇气最美!
2007-05-22 09:59
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
#include "stdio.h"
main()
{
int n,i,num[50];
int *p=num;
printf("\nInput the person's number:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
*p++=(i+1);
}
for(i=0;i<n;i++)
{
printf("%3d",*p);//可以直接用数组输出,要用对指针解引用还需要重设置指针p = num;
p++;
}
}

我想你说的是这样吧!
不存在效率问题,就是个书写习惯而已,不过这样写看起来爽些,呵呵!

[此贴子已经被作者于2007-5-22 11:02:23编辑过]


Fight  to win  or  die...
2007-05-22 10:49
jerny
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-23
收藏
得分:0 
代码没有什么问题,只是输出的问题
1。 for(i=0;i<n;i++)
{
*p=(i+1);
p++; (此句指针在变化,明显循环N此指针已经是+N了,例如原来指针指向的地址是0X0111,N=5,这是指针指向的地址为0X0111+5=0X0116)
}
for(i=0;i<n;i++)
{
printf("%3d",*p); (输出是从0X0116开始输出5个随机数,而不是我们想要的数据)
p++;
}


2。
for(i=0;i<n;i++)
{
*(p+i)=(i+1); (此句指针没有变化,而是指针中的数据在变化,此时指针仍是0X0111)
}
for(i=0;i<n;i++)
{
printf("%3d",*p); (输出是从0X0111开始输出5个数,是我们想要的数据,例如1 2 3 4 5)
p++;
}
}


只需要将1程序中的输出该一下,就OK了
#include "stdio.h"
main()
{
int n,i,num[50];
int *p=num;
printf("\nInput the person's number:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
*p=(i+1);
p++;
}
for(i=0;i<n;i++)
{
printf("%3d",*(p-n)); //就是这个地方
p++;
}
}
2007-05-22 10:56
g0070
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-5-2
收藏
得分:0 
for(i=0;i<n;i++)
{
printf("%3d",*p);
p++;
}

我是菜鸟,想问一下,这个%3d
是什么意思?

printf里那个p为什么还要*,难道不是

printf("%d",p);???
2007-05-22 10:59
忧郁的风
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2004-11-1
收藏
得分:0 
printf("%3d",*p);中的3表示输出的时候每个输出要占三个字符位,例如:*p=4,printf("%d",*p);的结果为:4,而printf("%3d",*p);的结果为: 4,注意,此时4前面有两个空格,如果输出的字符数大于printf("%nd",*p);中n指定的字符数,则安实际字符数输出.
*p中使用*才表示输出p所指向的地址中的值,若没有*,则输出p所指的地址,也就说*p输出的才是我们想要的输出值,而p输出的是值所在地址.
若不明白,可以在编译器中把两者的结果输出来比较一下就知道了.

轻轻的我走了,正如我轻轻的来,轻轻的我挥一挥衣袖,轻轻的抹去我留下的痕迹------风过无痕
2007-05-22 11:48
darklily
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-5-16
收藏
得分:0 

谢谢.明白了, 热心人真是多啊


2007-05-22 13:29
快速回复:[求助]还是指针.再看(晕)
数据加载中...
 
   



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

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