vka*_*hal 3 c++ pass-by-reference pre-increment
大家好,我在学习用c ++编写代码时有一个非常基本的问题.
我正在阅读通过引用传递和传递值之间的区别.我写了一个简单的代码来测试它,但它做了我没想到的事情.
    #include <iostream>
    using namespace std;
    void MyIncr (float *x);
    int main() {
        float score = 10.0;
        cout << "Orignal Value = " << score << endl;
        MyIncr(&score);
        cout << "New Value = " << score << endl;
     }
     void MyIncr (float *x) {
        *++x;
     }
为什么我的两个couts都得到10分?但是,如果我将功能更改为:
     void MyIncr (float *x) {
        *x += 1;
     }
我得到10为旧值,11为新值,这也是我在前一种情况下所期望的.
 void MyIncr (float *x) {
    *++x;
 }
在此上下文中是未定义的行为.您首先递增指针,然后取消引用它.当指针递增时,它不再指向有效float对象.因此,解除引用它是未定义的行为.
在调用方面,指针或指针指向的对象的值没有任何反应.要增加指针指向的对象的值,请使用++(*x).
 void MyIncr (float *x) {
    ++(*x);
 }
最好通过引用传递对象.会减少混乱.
 void MyIncr (float& x) {
    ++x;
 }
| 归档时间: | 
 | 
| 查看次数: | 107 次 | 
| 最近记录: |