hel*_*llo 3 c++ arrays pointers
为什么如果我有这样的函数,交换两个数字,它不起作用[swap],(我知道我可以通过在原型中声明指针,然后传递相应变量的地址来实现main()),但适用于数组,无需传递指针和地址.
不行
void num_exchange(int m, int n);
int main(){
int num1 = 5;
int num2 = 6;
num_exchange(num1 , num2 );
cout << "num1 =" << num1 << endl;
cout << "num2 =" << num2 << endl;
return 0;
}
void num_exchange(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
}
Run Code Online (Sandbox Code Playgroud)
作品
void arr_exchange(int [], int);
int main(){
int n[7] = { 0, 0, 0, 0, 0, 0, 0 };
arr_exchange(n, 7);
for (int i = 0; i < 7; i++)
cout << n[i] << " ";
return 0;
}
void arr_exchange(int x[], int){
for (int i = 0; i < 7; i++)
x[i] = 1;
}
Run Code Online (Sandbox Code Playgroud)
void num_exchange(int m, int n){
int temp;
temp = m;
m = n;
n = temp;
}
Run Code Online (Sandbox Code Playgroud)
修改输入整数的副本.使您的代码可以使用
void num_exchange(int& m, int& n){
int temp;
temp = m;
m = n;
n = temp;
}
Run Code Online (Sandbox Code Playgroud)
相反(请注意&第一行).这称为通过引用传递.一般来说,std::swap用来交换东西.
void arr_exchange(int x[], int){
for (int i = 0; i < 7; i++)
x[i] = 1;
}
Run Code Online (Sandbox Code Playgroud)
因为在C++中有效
void arr_exchange(int x[], int){
Run Code Online (Sandbox Code Playgroud)
相当于
void arr_exchange(int* x, int){
Run Code Online (Sandbox Code Playgroud)
所以这里传递一个指针,因此原始数据被修改.