利用指针倒着打印,出现奇怪的结果(C 的43讲 思考题)
本帖最后由 欣欣celin 于 2014-4-7 22:59 编辑#include <stdio.h>
int prnt(int *arr);
int main()
{
int *p, i, a;
p=a;
for(i=0; i<10; i++)
{
scanf("%d", p++);
}
printf("\n");
prnt( p );
}
int prnt(int *arr)
{
int i, p=*arr;
for(i=0, --p; i<10; i++, p--)
{
printf("%d\t", p);
}
}
以上程式运行后,当输入1,2,3,4,5,6,7,8,9,0时
输入结果是9,8,7,6,5,4,3,2,1,0
而不是0,9,8,7,6,5,4,3,2,1
为什么?
int i, p=*arr;
这就相当于写了
p = a (不存在数组越界的问题) 很明显逻辑错误了
稍微改了下#include <stdio.h>
int prnt(int *arr);
int main()
{
int *p, i, a;
p=a;
for(i=0; i<10; i++)
{
scanf("%d", p++);
}
printf("\n");
prnt( --p );//像你那样也可以
}
int prnt(int *arr)
{
int i;
int * p;//p定义成指针
p = arr;//有点懊恼干嘛不直接用arr???
for(i=0; i<10; i++, p--)
{
printf("%d\t", *p);//指针的话要加*
}
} 应该这样写
int prnt(int *arr)
{
int i, *p=arr;
for(i=0, --p; i<10; i++, p--)
{
printf("%d\t", *p);
}
} 本帖最后由 向往青莲 于 2014-4-6 22:09 编辑
应该在你的print函数里。。p不是指针。。p是9.
p - 1 = 8
p - 1= 7
ps: 好吧。。我居然不是二楼
#include <stdio.h>
int prnt(int *arr);
int main()
{
int *p, i, a;
p=a;
for(i=0; i<10; i++)
{
scanf("%d", p++);
}
printf("\n");
prnt( p );
}
int prnt(int *arr)
{
int i;
int *p=arr; //改了这里
for(i=0, --p; i<10; i++, p--)
{
printf("%d\t", *p); // 改了这里
}
}
上面的程序好像运行不了,两个函数都需要一个返回值,我给你改了一下可以运行了:
#include <stdio.h>
int prnt(int *arr);
int main()
{
int *p, i, a;
p=a;
for(i=0; i<10; i++)
{
scanf("%d", p++);
}
printf("\n");
prnt( p );
return 0;
}
int prnt(int *arr)
{
int i;
int *p=arr;
for(i=0, --p; i<10; i++, p--)
{
printf("%d\t", *p);
}
return *p;
}
非常感谢各位大神出招,都是正解,受益良多,有木有可以同时采纳为最佳的方法呢{:7_154:}
页:
[1]