冒泡算法指针实现的小疑问
本帖最后由 谓我心忧 于 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指针指向的数据而不是地址对这个程序有什么影响么,形参都带*阿,更加困惑了...
给你稍微改动一下 能运行的
#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:18 编辑
这个值得考虑,手边暂时没C。。。
[*]bubble(a, 10);
貌似a应该传递的是地址吧?
machimilk 发表于 2014-3-21 23:08 static/image/common/back.gif
给你稍微改动一下 能运行的
这是C++阿,我的那个也能运行,就是执行出错.不过还是谢谢了. 清明 发表于 2014-3-21 23:09 static/image/common/back.gif
这个值得考虑,手边暂时没C。。。
[*]bubble(a, 10);
对,改一下实参之后完美运行,问题是这样有什么区别呢?有点困惑... 数组名理解成指向数组第一个元素的指针 谓我心忧 发表于 2014-3-22 07:59 static/image/common/back.gif
对,改一下实参之后完美运行,问题是这样有什么区别呢?有点困惑...
你可以把a跟*a输出一下,看看都是什么 不错不错长见识了 不错不错长见识了
页:
[1]