注册 登录
编程论坛 C++教室

求解析下

瞎老头 发布于 2012-10-28 16:08, 412 次点击
#include<iostream>
using namespace std;

void get_numbers(int& input1,int& input2);
void swap_values(int& variable1,int&  variable2);
void show_results(int out1,int out2);

int main()
{
  int first_num,second_num;

  get_numbers(first_num,second_num);
  //cout<<first_num;
  swap_values(second_num,first_num);
  //cout<<first_num;
  show_results(first_num,second_num);

  return 0;
}

void get_numbers(int& input1,int& input2)
{
    cout<<"Enter your two numbers:\n";
    cin>>input1
        >>input2;
    cout<<endl;
}

void swap_values(int& variable1,int& variable2)
{
    int tem;
    tem=variable1;
    variable1=variable2;
    variable2=tem;
}

void show_results(int output1,int output2)
{  

    cout << "firstnum is :"<<output1<<endl;
    cout <<"secondnum is:"<<output2<<endl;
}


当在把void swap_values(int& variable1,int& variable2)改为传值调用的时候,怎么交换功能就不能实现了?
本人新手,谢谢了!
6 回复
#2
小小小火柴2012-10-28 16:58
        可以实现啊? 我输入2 3 得到的结果是:    firstnum is :3
secondnum is:2
#3
瞎老头2012-10-29 10:10
没啊,我试了多变,还是没交换值呢?不是引用调用,引用调用可以,值就不可以了,,郁闷.\

#include<iostream>
using namespace std;

void get_numbers(int& input1,int& input2);
void swap_values(int variable1,int  variable2);
void show_results(int out1,int out2);

int main()
{
  int first_num,second_num;

  get_numbers(first_num,second_num);
  //cout<<first_num;
  swap_values(first_num,second_num);
  //cout<<first_num;
  show_results(first_num,second_num);

  return 0;
}

void get_numbers(int& input1,int& input2)
{
    cout<<"Enter your two numbers:\n";
    cin>>input1
        >>input2;
    cout<<endl;
}

void swap_values(int variable1,int variable2)
{
    int tem;
    tem=variable1;
    variable1=variable2;
    variable2=tem;
    cout<<variable2;
}

void show_results(int output1,int output2)
{  

    cout << "firstnum is :"<<output1<<endl;
    cout <<"secondnum is:"<<output2<<endl;
}

再看下,谢谢了
#4
zxd5432012-10-29 10:29
你应该好好看看传址调用和传值调用
#5
超级菜鸟手2012-10-29 11:07
传值(pass by value) - 不会改变原有的value
传引用(pass by reference) - 会随着value的改变

好比说这个
void swap_values(int &variable1,int &variable2)
{
    int tem;
    tem=variable1;
    variable1=variable2;
    variable2=tem;
    cout<<variable2;
}

当没有红色标记的符号时 返回的value是原有的 而不是 swap_value 过后的
也许你的 cout<<variable2 是改变过后的value
但在你void show_results 你都value 还是原有的value

[ 本帖最后由 超级菜鸟手 于 2012-10-29 17:28 编辑 ]
#6
瞎老头2012-10-30 20:42
回复 5楼 超级菜鸟手
太谢谢了。。有点懂了……我再练习个…………
#7
瞎老头2012-10-30 21:51
DigitalTime::DigitalTime(int the_hour,int the_minute)
{
    if(the_hours<0||the_minute>59||the_hour>23||the_minute<0)
    {
        cout<<"Illgal argument to DigitalTime constructor.\n"'
            exit(1);
    }
    else
    {
        hour=the_hour;
        minute=the_minute;
    }

}

像这样的定义构造函数,给私有变量hour和minute初始化,算不算是传值调用呢?要是的话,在调用函数外部,私有变量岂不是没法初始化了?
1