谓我心忧 发表于 2014-3-21 22:50:49

冒泡算法指针实现的小疑问

本帖最后由 谓我心忧 于 2014-3-22 07:58 编辑

最近在研究<c缺陷与陷阱>,里面讲到指针和数组其实大致都是以指针传送的,所以用冒泡算法试验了一下,居然失败了,是我把它写成多维数组了么?最近疏于操作,编码越发不规范,代码如下,还请各位帮一下,编译正常,达不到想要的结果.



#include <stdio.h>

void bubble(int *a, int n);
int main(void)
{
    int a, i;
    for(i = 0; i<10; i++)
    {
      scanf("%d", &a);
    }
    printf("go go HAHAHA!~\n");
    bubble(*a, 10);
    for(i = 0; i<10; i++)
    {
      printf("%d\n",a);
    }
    getchar();
    return 0;
}
void bubble(int *a, int n)
{
    int i, j, k;
    for(i = 1; i<n; i++)
    {
      for(j = 0; j < n - i; j++)
      {
            if(*(a+j)>*(a+j+1))
            {
                k = *(a+j+1);
                *(a+j+1) = *(a+j);
                *(a+j) = k;
            }
      }
    }
}   感谢鱼友的回答,我把实参修改了一下(传递的*a改称了a),居然成功执行了,这是为什么,传递a指针指向的数据而不是地址对这个程序有什么影响么,形参都带*阿,更加困惑了...

machimilk 发表于 2014-3-21 23:08:35

给你稍微改动一下 能运行的
#include <iostream>
using namespace std;

#include <stdio.h>

void bubble(int *a, int n);
int main(void)
{
        int a, i;
        for(i = 0; i<10; i++)
        {
                scanf("%d", &a);
        }
        printf("go go HAHAHA!~\n");
        bubble(a, 10);
        for(i = 0; i<10; i++)
        {
                printf("%d\n",a);
        }
    system("pause");
        return 0;
}
void bubble(int *a, int n)
{
        int i, j, k;
        for(i = 1; i<n; i++)
        {
                for(j = 0; j < n - i; j++)
                {
                        if(*(a+j)>*(a+j+1))
                        {
                                k = *(a+j+1);
                                *(a+j+1) = *(a+j);
                                *(a+j) = k;
                        }
                }
        }
}

清明 发表于 2014-3-21 23:09:19

本帖最后由 清明 于 2014-3-21 23:18 编辑

这个值得考虑,手边暂时没C。。。

[*]bubble(a, 10);
貌似a应该传递的是地址吧?

谓我心忧 发表于 2014-3-22 07:46:13

machimilk 发表于 2014-3-21 23:08 static/image/common/back.gif
给你稍微改动一下 能运行的

这是C++阿,我的那个也能运行,就是执行出错.不过还是谢谢了.

谓我心忧 发表于 2014-3-22 07:59:09

清明 发表于 2014-3-21 23:09 static/image/common/back.gif
这个值得考虑,手边暂时没C。。。

[*]bubble(a, 10);


对,改一下实参之后完美运行,问题是这样有什么区别呢?有点困惑...

一张草纸 发表于 2014-3-22 18:33:37

数组名理解成指向数组第一个元素的指针

清明 发表于 2014-3-24 06:48:19

谓我心忧 发表于 2014-3-22 07:59 static/image/common/back.gif
对,改一下实参之后完美运行,问题是这样有什么区别呢?有点困惑...

你可以把a跟*a输出一下,看看都是什么

于禹尔 发表于 2014-4-27 21:39:53

不错不错长见识了

于禹尔 发表于 2014-4-27 21:45:10

不错不错长见识了
页: [1]
查看完整版本: 冒泡算法指针实现的小疑问