我正在使用C++进行冒泡排序,并且我在将值作为指针传递时遇到问题.这是我的代码:
#include <iostream>
using namespace std;
int values[9] = {7, 3, 9, 4, 6, 1, 2, 8, 5};
void printValues(){
for (int i=0; i<9; i++)
cout<<values[i]<<endl;
}
void sortValues(){
for(int i=0;i<9;i++){
for(int j=0;j<8;j++){
if (values[i]>values[j]){
swapValues(values[i], values[j]);
printValues();
}
}
}
}
void swapValues(int *i, int *j){
int temp = *i;
*i = *j;
*j = temp;
}
int main(){
cout << "Before: " <<endl;
printValues();
sortValues();
cout << "After: " <<endl;
printValues();
}
Run Code Online (Sandbox Code Playgroud)
当我按原样运行代码时,收到错误消息:'swapValues'未在此范围内声明.我试过改变我添加星号的地方(swapValues(values [i],values [j]);)但这似乎让事情变得更糟.有任何想法吗?谢谢!
函数需要(至少)在使用之前声明.移动swapValues上面的定义sortValues或写一个声明:
void swapValues(int *i, int *j);
void sortValues(int *i, int *j) {
// etc...
Run Code Online (Sandbox Code Playgroud)
此外,作为swapValues指针,您需要在调用时获取数组元素的地址:
swapValues(&values[i], &values[j]);
Run Code Online (Sandbox Code Playgroud)
或者,因为数组衰减到指向它们的第一个元素,你可以使用指针算法而不是索引:
swapValues(values+i, values+j);
Run Code Online (Sandbox Code Playgroud)