欣欣celin 发表于 2014-4-6 21:02:42

利用指针倒着打印,出现奇怪的结果(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
为什么?

牡丹花下死做鬼 发表于 2014-4-6 21:02:43

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);//指针的话要加*
    }
}

似水无痕 发表于 2014-4-6 22:05:24

应该这样写
int prnt(int *arr)
{
    int i, *p=arr;
    for(i=0, --p; i<10; i++, p--)
    {
      printf("%d\t", *p);
    }
}

向往青莲 发表于 2014-4-6 22:06:25

本帖最后由 向往青莲 于 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); // 改了这里
    }
}

青玄 发表于 2014-4-6 22:47:10

上面的程序好像运行不了,两个函数都需要一个返回值,我给你改了一下可以运行了:
#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;
}







欣欣celin 发表于 2014-4-7 22:57:44

非常感谢各位大神出招,都是正解,受益良多,有木有可以同时采纳为最佳的方法呢{:7_154:}
页: [1]
查看完整版本: 利用指针倒着打印,出现奇怪的结果(C 的43讲 思考题)