鱼C论坛

 找回密码
 立即注册
查看: 3330|回复: 10

想了一晚上,没搞明白,求解。。。。

[复制链接]
发表于 2012-8-5 13:38:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 是我 于 2012-8-6 09:35 编辑

#include <stdio.h>

void main()
{
        int *swap(int *p, int n);
        int a[] = {1, 3, 4, 5, 6, 7, 8, 9};
        int n, *pt, i;

        printf("Please input a  number: ");
        scanf("%d", &n);

        pt = swap(a, n);
        
        for(i = 0; i <= 4; i++)
        {
                printf("%d\n", *(pt+i));
        }
}

int *swap(int *p, int n)
{
        int i, j, k, b[9];

        for(i=0; i <= 7; i++)
        {
                j = i+1;

                if(n > *(p+i) && n < *(p+j))
                {
                        b = *(p+i); i++; break;
                }
                else
                {
                        b = *(p+i);
                }
        }
        b = n;
        for(k = i+1; k <= 8; k++)
        {
                b[k] = *(p+k-1);
        }

        return b;
}
为什么能返回 b 数组 的地址,却不能打印出来。小甲鱼的视频里的一道题。求的是输入一个数,然后按顺序插入A 数组中。。


有人说是b 数组是局部变量,但是我把它当地址返回了,不是也可以吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-5 19:12:46 From FishC Mobile | 显示全部楼层
能把问题说清楚点吗,是安大小选择插入位置吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-5 20:52:12 | 显示全部楼层
b是函数里的局部变量,函数结束数据就会销毁,可以把b放到函数外作为全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-6 09:21:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 09:52:57 | 显示全部楼层
b 的含义是数组的首地址, 是个常数,怎么能给他赋值呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 12:11:16 | 显示全部楼层
是我 发表于 2012-8-6 09:21
可我把它的地址返回去了,不可以吗

虽然返回了局部变量的地址,但地址里面的数据已经不属于程序了,可能被覆盖,如果声明为全局变量就一直属于程序直到程序结束
而且b = *(p+i); i++; break;
b = *(p+i);
b = n;
里的b应该改成*(b+i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 18:02:15 | 显示全部楼层
:Q:Q:Q看来我帮不了你 等高手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 19:14:11 | 显示全部楼层
没看过C视频不过我帮你把程序改了下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-6 19:16:08 | 显示全部楼层
#include <stdio.h>

int b[9]={0};//返回数组应该全局。不然函数结束。局部变量全部释放了。
void main()
{
        int *swap(int *p, int n);
        int a[] = {1, 3, 4, 5, 6, 7, 8, 9};
        int n, *pt, i;

        printf("Please input a  number: ");
        scanf("%d", &n);

        pt = swap(a, n);

        for(i = 0; i <= 8; i++)
        {
                printf("%d\n", *(pt+i));
        }
}

int *swap(int *p, int n)
{
        int i, j, k;
       
        for( i = 0; i <= 7; i++)
        {
                j = i + 1;
                if(n > *(p+i) && n < *(p+j))
                {
                        b[i] = *(p+i);//b是个数组。你直接给他赋值不行。需要给他带下标
                        b[i+1] = n;          //你需要插入的数值,应该放这里。放循环外面,比如你输入个“7”结果就不是你想要的。
                        i++;
                        break;
                }
                else
                {
                        b[i] = *(p+i);
                }
        }

        for(k = i+1; k <= 8; k++)
        {
                b[k] = *(p+k-1);
        }
        return b;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-9 22:08:51 | 显示全部楼层
首先你的语法就有问题,数组不能整体赋值,还有,排序需要返回值么?
下面是我的代码,希望对你有用!
  1. #include <stdio.h>
  2. #define N 6

  3. main()
  4. {
  5. void swap(int *x,int n);
  6. int a[6]={1,3,5,7,9},i,n;
  7. scanf("%d",&n);
  8. swap(a,n);
  9. for(i=0;i<N;i++)
  10. {
  11. printf("%d ",a[i]);
  12. }
  13. }
  14. void swap(int *x,int n)
  15. {
  16. int i,j;
  17. for(i=0;i<N-1;i++)
  18. {
  19. if(x[i]>n)
  20. {
  21. for(j=N-1;j>i;j--)
  22. {
  23. x[j]=x[j-1];
  24. }
  25. x[j]=n;
  26. break;
  27. }
  28. }
  29. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-10 11:36:18 | 显示全部楼层
是我 发表于 2012-8-6 09:21
可我把它的地址返回去了,不可以吗

你返回地址 但是这个地址的对象被销毁 不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-19 09:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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