[Học lập trình C++] Chương 1: 1.4a Làm quen với tham số và arguments

1.4a Làm quen với tham số và arguments
Function parameters and arguments
Trong phần trước, bạn đã học về hàm có thể trả về giá trị cho trình gọi thông qua giá trị trả về của hàm.
Trong nhiều trường hợp, rất hữu ích để truyền thông tin vào hàm được gọi, để hàm có dữ liệu để xử lý. Ví dụ, nếu chúng ta muốn viết một hàm cộng hai số, chúng ta cần một cách nào đó để nói với hàm 2 số nào cần được cộng khi chúng ta gọi nó. Nếu không, làm sao mà hàm có thể biết cộng cái gì với nhau? Chúng ta thực hiện điều này thông qua tham số và argument.
Một function parameter là một biến được sử dụng trong một hàm nơi mà giá trị được cung cấp bởi trình gọi hàm. Tham số hàm được đặt giữa hai dấu ngoặc sau tên hàm, với nhiều tham số có thể chia cách nhau bởi dấu phẩy.
Đây là một vài ví dụ của hàm với số lượng tham số khác nhau:
// This function takes no parameters
// It does not rely on the caller for anything
void doPrint()
{
    std::cout << "In doPrint()" << std::endl;
}

// This function takes one integer parameter named x
// The caller will supply the value of x
void printValue(int x)
{
    std::cout << x  << std::endl;
}

// This function has two integer parameters, one named x, and one named y
// The caller will supply the value of both x and y
int add(int x, int y)
{
    return x + y;
}

Một argument là một giá trị mà truyền vào từ trình gọi đến hàm khi hàm được gọi:

2
printValue(6); // 6 is the argument passed to function printValue()
add(2, 3); // 2 and 3 are the arguments passed to function add()

Chú ý rằng nhiều argument cũng được phân cách bởi dấu phẩy. Số lượng của arguments phải khớp với số lượng tham số, nếu không trình biên dịch sẽ báo lỗi.
Làm thế nào mà tham số và argument hoạt động cùng nhau
Khi mà một hàm được gọi, tất cả tham số của hàm được tạo ra như một biến, và giá trị của mỗi argument được copy vào tham số tương ứng. Quá trình này được gọi là truyền theo trị.
Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//#include "stdafx.h" // Visual Studio users need to uncomment this line
#include <iostream>

// This function has two integer parameters, one named x, and one named y
// The values of x and y are passed in by the caller
void printValues(int x, int y)
{
    std::cout << x << std::endl;
    std::cout << y << std::endl;
}

int main()
{
    printValues(6, 7); // This function call has two arguments, 6 and 7

    return 0;

Khi hàm printVaules() được gọi với argument 6 và 7, tham số của hàm printValue x được tạo ra và được gán giá trị 6, tham số y được tạo ra và được gán giá trị 7.
Kết quả xuất ra:
6
7
Tham số và giá trị trả về hoạt động cùng với nhau như thế nào
Bằng cách sử dụng cả tham số và giá trị trả về, chúng ta có thể tạo ra hàm mà lấy dữ liệu đầu vào thực hiện một số tính toán và trả về giá trị cho trình gọi.
Đây là một ví dụ của hàm đơn giản mà cộng hai số lại với nhau và trả về kết quả cho trình gọi.
//#include "stdafx.h" // Visual Studio users need to uncomment this line
#include <iostream>

// add() takes two integers as parameters, and returns the result of their sum
// The values of x and y are determined by the function that calls add()
int add(int x, int y)
{
    return x + y;
}

// main takes no parameters
int main()
{
    std::cout << add(4, 5) << std::endl; // Arguments 4 and 5 are passed to function add()
    return 0;
}

Khi hàm add() được gọi, tham số x được gán giá trị 4,  và tham số y được gán giá trị 5.
Hàm add() sau đó tình toán giá trị x+y, kết quả là 9 và được trả về cho hàm main(). Giá trị này được truyền vào cout để in giá trị ra màn hình. Kết quả:
9
Nhiều ví dụ thêm
Quan sát một số hàm khác được gọi.
//#include "stdafx.h" // Visual Studio users need to uncomment this line
#include <iostream>

int add(int x, int y)
{
    return x + y;
}

int multiply(int z, int w)
{
    return z * w;
}

int main()
{
    using namespace std;
    cout << add(4, 5) << endl; // within add(), x=4, y=5, so x+y=9
    cout << multiply(2, 3) << endl; // within multiply(), z=2, w=3, so z*w=6

    // We can pass the value of expressions
    cout << add(1 + 2, 3 * 4) << endl; // within add(), x=3, y=12, so x+y=15

    // We can pass the value of variables
    int a = 5;
    cout << add(a, a) << endl; // evaluates (5 + 5)

    cout << add(1, multiply(2, 3)) << endl; // evaluates 1 + (2 * 3)
    cout << add(1, add(2, 3)) << endl; // evaluates 1 + (2 + 3)

    return 0;
}

Chương trình sẽ tạo ra kết quả:
9
6
15
10
7
6

Hai câu lệnh đầu tiên thì rất dễ hiểu. trong câu lệnh thứ 3, tham số là một biểu thức mà sẽ được tính toán trước khi truyền vào. Trong trường hợp này 1+2 thu được 3, vì vậy 3 được truyền vào x. 3*4 được tính ra 12, vì vậy 12 được truyền vào y. add(3, 12) tính ra kết quả 15.
Cặp câu lệnh tiếp theo thì cũng tương đối dễ.
    int a = 5;
    cout << add(a, a) << endl; // evaluates (5 + 5)
trong trường hợp này, dd() được gọi với x = a và y = a. Do a =  5, add(a, a) = add(5, 5), kết quả là 10.
Quan sát câu lệnh phức tạp đầu tiên.
cout << add(1, multiply(2, 3)) << endl; // evaluates 1 + (2 * 3)

Khi hàm add() được thực thi, CPU cần tính những giá trị gì cho tham số x và y. x thì đơn giản vì chúng ta chỉ truyền vào giá trị 1. Để lấy được giá trị của y, nó cần tính toán hàm multiply(2, 3). CPU gán giá trị z = 2 và w = 3 và multiply(2, 3) trả về giá trị integer 6. Giá trị này gán cho y của hàm add(). Add(1, 6) trả về giá trị integer 7, cái mà truyền vào cout để in ra màn hình.
Nguồn: learncpp.com

Nhận xét

Bài đăng phổ biến