鱼C论坛

 找回密码
 立即注册
查看: 3503|回复: 8

求帮忙解决此程序

[复制链接]
发表于 2012-2-15 20:28:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 猪好大 于 2012-2-16 08:36 编辑

void app(int *p,int a[]);
main()
{
    int i,a[10]={1,2,3,4,5,6,7,8,9,0};
    int *p;
    p=&a;//把a的首地址给P
    app(p,a);
    for(i=0; i<10; i++)
        printf("%d\n",a);
}
void app(int *p,int a[])
{
    int i;
    for(i=9; i>=0; i--,p++)
    {
        *p=a;

    }
}
刚学到指针这个程序目的是把数字掉转输出的,可是输出结果是0 9 8 7 6 6 7 8 9 0
求高人解答为什么,如果可以麻烦能不能修改一下.
第二问就是  void app(int *p,int a[]);这个函数, 我在声明和定义的时候改成为 void int app(int *p,int a[]);这样的话会报错何解呢?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-15 21:22:28 | 显示全部楼层
输出语句是a[i]    贴子不知为何改不回来
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-15 21:44:03 | 显示全部楼层
程序有问题。
你试试数。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-15 21:48:31 | 显示全部楼层
关注中......路人.......
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-15 21:55:58 | 显示全部楼层
p=&a;
类型不对
a类型: int(*)[10]
p类型:int* 指向int,
你认为可以赋值?
&a + 1 = a地址 + 40字节
a + 1 = a地址 + 4字节

改成p  = a
a代表的是&a[0]
因为a = a + 0
a + 0 = &*(a + 0) = &a[0]
a[0]代表的是a数组第一个元素 a数组元素为int
int *指向int的地址 才正确
函数没作用去掉

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-15 22:31:56 | 显示全部楼层
你要多加油了!基础知识不扎实,而且逻辑不是很清晰!
void 是空类型,void name() 表示这个函数会返回一个空类型值,也就是没有返回值,
而 int name() 表示这个函数会返回一个整型值,void int name() 这个函数返回值矛盾,所以编译不可能通过。
提醒一下,类似你的 main() 主函数,前面的应该有一个返回值,虽然这样没错,但建议最好不用缺省返回值,希望以下代码对你有帮助!
  1. # include <stdio.h>

  2. //void app(int *p, int a[]);
  3. void app2(int *, int);

  4. int main(void)
  5. {
  6.     int i, a[10] = {1,2,3,4,5,6,7,8,9,0};

  7.     //int *p;
  8.     //p = &a;//把a的首地址给P
  9.     //app(p, a);

  10.         app2(a, 10);

  11.     for(i=0; i<10; i++)
  12.         {
  13.         printf("%d\n", a[i]);
  14.         }
  15.        
  16.         return 0;
  17. }

  18. void app2(int *p, int len)
  19. {
  20.         int i, temp;

  21.         for (i=0; i<10/2; i++)
  22.         {
  23.                 //从两端互换值,例如:第一个和最后一个换,第二个和倒二换...
  24.                 temp = p[i];
  25.                 p[i] = p[len-1-i]; //p[len-1]表示数组最后一个元素
  26.                 p[len-1-i] = temp;
  27.         }
  28. }

  29. /*
  30. void app(int *p, int a[])
  31. {
  32.     int i;

  33.     for(i=9; i>=0; i--, p++)
  34.     {
  35.         *p=a[i]; //赋值?这样数组元素不就改变了吗?这里应该用交换元素值
  36.     }
  37. }
  38. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-15 22:58:17 | 显示全部楼层
我回答第二个问题吧,原来程序声明app函数返回为空,而你修改以后返回值为空又为整型,所以报错。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-15 23:34:49 | 显示全部楼层
太感谢你们了~~~~谢谢大家的帮助
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-16 21:48:06 | 显示全部楼层
呵呵 这个不是你用法不到家 是你的算法有问题 简单的说就是你把有效的数字覆盖掉了
当然解决办法有很多 比如 申请一个 temp变量 来存储临时数据  还有几种就不介绍了 比较复杂 本人语言贫乏将不清楚
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-11 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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