鱼C论坛

 找回密码
 立即注册
查看: 2170|回复: 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] (不存在数组越界的问题) 很明显逻辑错误了 稍微改了下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-6 21:02:43 | 显示全部楼层
int i, p=*arr;
这就相当于写了
p = a[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 );//像你那样也可以
}
int prnt(int *arr)
{
    int i;
        int * p;//p定义成指针
        p = arr;//有点懊恼干嘛不直接用arr???
    for(i=0; i<10; i++, p--)
    {
        printf("%d\t", *p);//指针的话要加*
    }
}
想知道小甲鱼最近在做啥?请访问 -> 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);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[10];
    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); // 改了这里
    }
}

想知道小甲鱼最近在做啥?请访问 -> 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





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 00:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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