void maopao(int* p)
{
//cout << *p<<*(++p);//为什么是反过来的????cout从右往左读取
for (int i = 9; i >0; i--/*int i=0;i<9;i++*/)
{
for (int j = 0; j <i; j++/*int j=0;j<9-i;j++*/)
{
//int temp = 0;//想问一下 这一段为什么不行啊
//if (*p > *(++p))
//{
// temp = *(++p);
// *(++p) = *p;
// *p = temp;
//}
if (p[j] > p[j+1])
{
int temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
int main()
{
int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
maopao(arr);
for (int i = 0; i < 10; i++)
{
cout << arr[i];
}
}
冒泡排序 把数组从小到大排序的程序 但指针的有点搞不懂
想请问一下 void maopao中间//斜杠掉的部分为什么不行啊 能不能解引用之后直接比较数值啊
还有个问题 传递到void maopao中的不是指针吗 为什么p[i]跟数组是一样的呀
你每执行一次++p 指针都会后移一位
你的代码都不是需要交换的那两个数字了,
你可以定义一个新的指针变量q存++p的地址,用作和p交换 ,当然,你需要注意,你执行++p之后,原来的p也会后移一位
所以,你最好写成p+1与p交换
综上所述,你把你代码中的++p写成p+1就好了
数组名就是数组首地址,既然是地址就是指针类型,基础没学明白呀
int a[10], *p=a; 那a[i]与p[i]有啥区别呢?
a[i+1]不就是 *(p+1)嘛