为什么x打印出1,2,3,4而不是4,3,2,1.当我打印输入[0]时,它说4.不应该通过引用传递数组吗?所以我可以用x来表示原来是x的输入?顺便说一句,这是C++.这不是另一个问题的重复.如果我在rev listo中打印出数组,它会正确打印.问题在于可以在main函数中调用数组.
using namespace std;
void rev_listo(int input[], int num)
{
int end_list[num];
for (int x = 0; x<num; x++) {
end_list[x]=input[num-x-1];
// cout<<end_list[x]<<endl;
}
// std::cout<<input<<std::endl;
input=end_list;
cout<<input[0]<<endl;
}
int main() {
int x [4];
x[0]=1;
x[1]=2;
x[2]=3;
x[3]=4;
rev_listo(x, 4);
for(int y = 0; y<4; y++) {
std::cout<<x[y]<<std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在内部,当你这样做时void rev_listo(int input[], int num),会传递一个指向数组第一个元素的指针(只是为了避免复制数组).
像这样:
void rev_listo(int *input /* = &(arr[0])*/, int num)
Run Code Online (Sandbox Code Playgroud)
请注意,input指针本身是按值复制的,而不是通过引用复制的.所以,当你这样做时,第一个元素的地址end_list被复制到input指针:
input=end_list;
Run Code Online (Sandbox Code Playgroud)
当函数结束时,指针input死亡.
void rev_listo(int input[], int num)
{
int end_list[num];
for(int x = 0; x<num; x++){
end_list[x]=input[num-x-1];
//cout<<end_list[x]<<endl;
}
// std::cout<<input<<std::endl;
input=end_list;
cout<<input[0]<<endl;
} // input pointer dies here. So does num.
Run Code Online (Sandbox Code Playgroud)
input=end_list;您应该手动复制数组,而不是像这样分配指针:像这样:
for(int x = 0; x<num; x++){
input[x] = end_list[x];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |