我正在使用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();
}
当我按原样运行代码时,收到错误消息:'swapValues'未在此范围内声明。我试过改变我添加星号的地方(swapValues(values [i],values [j]);)但这似乎让事情变得更糟。有任何想法吗?谢谢!
答案 0 :(得分:5)
在使用函数之前,必须(至少)声明函数。将swapValues
的定义移到sortValues
之上或写一个声明:
void swapValues(int *i, int *j);
void sortValues(int *i, int *j) {
// etc...
此外,当swapValues
需要指针时,您需要在调用时获取数组元素的地址:
swapValues(&values[i], &values[j]);
或者,因为数组衰减到指向它们的第一个元素,你可以使用指针算术而不是索引:
swapValues(values+i, values+j);
答案 1 :(得分:2)
swapValues()函数。
答案 2 :(得分:1)
将调用swapValues的程序更改为
swapValues(&values[i], &values[j]);