Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Dùng hàm ở vế trái biểu thức trong C và C++


Trong C không thể dùng tên hàm ở vế trái biểu thức. Trong C++ có thể nhờ hàm trả về tham chiếu.

Hàm C++ có thể trả về tham chiếu tương tự như trả về con trỏ.

Khi hàm trả về tham chiếu, nó trả con trỏ ngầm đến giá trị trả về. Cách này cho phép hàm dùng ở vế trái phép gán. Ví dụ chương trình đơn giản:

Ví dụ

#include <iostream>
#include <ctime>
using namespace std;

double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};

double& setValues(int i) {
    return vals[i]; // trả về tham chiếu đến phần tử thứ i
}

int main() {
    cout << "Value before change" << endl;
    for (int i = 0; i < 5; i++) {
        cout << "vals[" << i << "] = ";
        cout << vals[i] << endl;
    }
    setValues(1) = 20.23; // thay đổi phần tử 2
    setValues(3) = 70.8;  // thay đổi phần tử 4
    cout << "Value after change" << endl;
    for (int i = 0; i < 5; i++) {
        cout << "vals[" << i << "] = ";
        cout << vals[i] << endl;
    }
    return 0;
}

Kết quả

Value before change
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
Value after change
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50

Khi trả về tham chiếu, cẩn thận đối tượng tham chiếu không ra khỏi phạm vi. Không hợp pháp trả về tham chiếu đến biến cục bộ. Nhưng luôn có thể trả về tham chiếu đến biến static.

int& func() {
    int q;
    // return q; // Lỗi compile
    static int x;
    return x; // An toàn, x sống ngoài phạm vi này
}