鱼C论坛

 找回密码
 立即注册
查看: 2463|回复: 5

利用指针倒着打印,出现奇怪的结果(C 的43讲 思考题)

[复制链接]
发表于 2014-4-6 21:02:42 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 欣欣celin 于 2014-4-7 22:59 编辑

#include <stdio.h>
int prnt(int *arr);
int main()
{
    int *p, i, a[10];
    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[10] (不存在数组越界的问题) 很明显逻辑错误了 稍微改了下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-6 21:02:43 | 显示全部楼层
int i, p=*arr;
这就相当于写了
p = a[10] (不存在数组越界的问题) 很明显逻辑错误了
稍微改了下
  1. #include <stdio.h>
  2. int prnt(int *arr);
  3. int main()
  4. {
  5.     int *p, i, a[10];
  6.     p=a;
  7.     for(i=0; i<10; i++)
  8.     {
  9.         scanf("%d", p++);
  10.     }
  11.     printf("\n");
  12.     prnt( --p );//像你那样也可以
  13. }
  14. int prnt(int *arr)
  15. {
  16.     int i;
  17.         int * p;//p定义成指针
  18.         p = arr;//有点懊恼干嘛不直接用arr???
  19.     for(i=0; i<10; i++, p--)
  20.     {
  21.         printf("%d\t", *p);//指针的话要加*
  22.     }
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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);
    }
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-6 22:06:25 | 显示全部楼层
本帖最后由 向往青莲 于 2014-4-6 22:09 编辑

应该在你的print函数里。。p不是指针。。p是9.
p - 1 = 8
p - 1= 7
ps: 好吧。。我居然不是二楼
  1. #include <stdio.h>
  2. int prnt(int *arr);
  3. int main()
  4. {
  5.     int *p, i, a[10];
  6.     p=a;
  7.     for(i=0; i<10; i++)
  8.     {
  9.         scanf("%d", p++);
  10.     }
  11.     printf("\n");
  12.     prnt( p );
  13. }
  14. int prnt(int *arr)
  15. {
  16.     int i;
  17.         int *p=arr; //改了这里
  18.     for(i=0, --p; i<10; i++, p--)
  19.     {
  20.         printf("%d\t", *p); // 改了这里
  21.     }
  22. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-6 22:47:10 | 显示全部楼层
上面的程序好像运行不了,两个函数都需要一个返回值,我给你改了一下可以运行了:
#include <stdio.h>
int prnt(int *arr);
int main()
{
    int *p, i, a[10];
    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;
}

QQ截图20140406224040.jpg





小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-7 22:57:44 | 显示全部楼层
非常感谢各位大神出招,都是正解,受益良多,有木有可以同时采纳为最佳的方法呢{:7_154:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表