Sự Khác Nhau Giữa Parameter Trong C# Là Gì, Sự Khác Biệt Giữa Một Đối Số Và Một Tham Số Là Gì

Xin chào các bạn! Rất vui được gặp lại bạn trong khóa học lập trình trực tuyến C++.

Đang xem: Tham số trong c# là gì

Trong bài học hôm nay, chúng ta sẽ tìm hiểu về một số cách khác nhau để truyền đối số cho hàm. Lập luận được gọi như thế nào?

Ví dụ, tôi định nghĩa một chức năng như thế này:

void foo(int param1, int param2) //param1 và param2 là tham số{//làm gì đó} Do đó, chúng ta có tham số1tham số2 là 2 tham số (parameter) của hàm foo.

Tham số hàm là các biến được khai báo trong phần khai báo hàm. Tham số đóng vai trò nhận giá trị truyền vào cho hàm mỗi khi hàm được gọi.

Giả sử trong hàm chính Tôi thực hiện một cuộc gọi chức năng foo:

int main(){foo(1, 2); /// 1 và 2 là đối sốreturn 0;} Do đó, chúng ta có Đầu tiên2 là 2 đối số. Sau đó, giá trị Đầu tiên2 sẽ được nhận và lưu trữ tạm thời ở 2 tham số tham số1tham số2.

Đối số là giá trị được truyền cho hàm mỗi khi thực hiện lệnh gọi hàm. Đối số phải có kiểu dữ liệu khớp với tham số hàm.

Ngôn ngữ C++ hỗ trợ chúng ta rất nhiều kiểu truyền đối số khác nhau tương ứng với các kiểu khai báo tham số khác nhau:

Truyền đối số theo giá trị. Truyền đối số bằng tham chiếu. Truyền đối số làm địa chỉ.

Trong bài viết này, chúng ta sẽ tìm hiểu hai kiểu truyền đối số cơ bản: truyền theo giá trị và truyền theo tham chiếu.

Truyền đối số theo giá trị

Truyền đối số cho hàm theo giá trị có nghĩa là chúng ta sẽ truyền giá trị cho hàm và các tham số sẽ nhận các giá trị được truyền vào.

Ví dụ:

int add(int x, int y){return x + y;} Hàm add ở trên sẽ hoạt động như sau:

*

Với chức năng gọi thêm (4,5) thì giá trị 4 sẽ được chuyển vào biến x của tham số đầu tiên, giá trị 5 sẽ được gán cho biến y của tham số thứ hai.

Biến đổi xy khai báo như một tham số chức năng cộng hoạt động như một biến cục bộ hoạt động bên trong hàm cộng. Do đó, khi kết thúc phiên làm việc của hàm, các biến tham số này sẽ bị hủy và các giá trị truyền vào không còn tồn tại.

Điều gì xảy ra khi bạn chuyển một đối số cho một hàm là giá trị của một biến?

Trong ví dụ trên, hàm cộng được truyền vào 2 giá trị xác định là 4 và 5. Bây giờ mình thử lấy một ví dụ khi truyền đối số cho hàm là giá trị của biến như sau:

void swapValue(int value1, int value2){cout << “Hoán đổi giá trị trong hàm” << endl;int temp = value1;value1 = value2;value2 = temp;cout << “giá trị 1: ” << value1 << endl ;cout << “giá trị 2:” << giá trị 2 << endl;}Hàm giá trị trao đổi Tôi vừa khai báo 2 tham số kiểu intchúng sẽ lấy 2 giá trị nguyên và thực hiện hoán vị 2 số nguyên này bên trong hàm.

Xem thêm bài viết hay:  Người Trẻ Thích “ Làm Màu Là Gì ? Làm Màu Nói Tiếng Nhật Thế Nào

Hãy xem điều gì sẽ xảy ra khi thực hiện lời gọi hàm giá trị trao đổi:

int main(){int a = 1;int b = 2;swapValue(a, b);cout << “======================== ==== =======” << endl;cout << “Sau khi gọi hàm” << endl;cout << “giá trị 1: ” << a << endl;cout << “giá trị 2 : ” << b << endl;system(“pause”);return 0;}Đối số được truyền cho hàm giá trị trao đổi lần lượt là giá trị của biến một và giá trị của biến b sẽ được nhận bởi tham số giá trị1giá trị2. Ta sẽ có kết quả trên màn hình là giá trị của 2 biến mộtb sau khi thực hiện hoán vị bên trong hàm và giá trị của hai biến mộtb sau khi thực hiện lời gọi hàm giá trị trao đổi.

*

Như bạn cũng đã thấy, giá trị của hai biến giá trị1giá trị2 (nhận từ đối số là giá trị của biến mộtb) đã được hoán đổi cho nhau. Nhưng sau khi thực hiện công việc bên trong chức năng giá trị trao đổi và quay lại để thực hiện phần còn lại của công việc bên trong chức năng chínhgiá trị của hai biến mộtb vẫn không có gì thay đổi.

Điều này có nghĩa là tham số giá trị1giá trị2 chỉ nhận được 2 bản sao giá trị của biến mộtb.

*

Mọi thay đổi về giá trị của tham số bên trong hàm đều không ảnh hưởng đến giá trị ban đầu mà đối số đang nắm giữ. Thử nghiệm với ví dụ sau:

void printAddressOfParameter(int tham số){cout << “Địa chỉ của đối số: ” << ¶meter << endl;}int main(){int argument;cout << “Địa chỉ của đối số: ” << &argument << endl;printAddressOfParameter ( đối số);system(“pause”);return 0;}Khi chạy chương trình này, bạn sẽ thấy địa chỉ của biến. tranh luận và địa chỉ của tham số tham số trong một chức năng hoàn toàn khác.

Truyền đối số bằng tham chiếu

Chức năng nhập liệu hoạt động như thế nào (đầu vào) là một giá trị khá dễ hiểu và dễ thiết lập, tuy nhiên nó có một số hạn chế như sau:

Khi truyền đối số cho hàm là giá trị, cách duy nhất để nhận kết quả (đầu ra) là trả về một giá trị thông qua từ khóa return.

Khi truyền đối số cho hàm là giá trị, hàm chỉ có thể trả về một giá trị duy nhất trong một lần gọi hàm (nếu hàm có kiểu trả về).

Thử lấy một ví dụ để thấy rõ hai vấn đề trên:

int addOne(int value){return value + 1;}Tôi vừa định nghĩa một hàm thêm 1 đơn vị vào đối số. Cách duy nhất để tôi nhận được giá trị đầu ra của hàm này là xác định hàm có kiểu trả về và sử dụng từ khóa trở về.

int main(){int number = 9;number = addOne(number); //function callsystem(“pause”);return 0;}Vì vậy, nếu tôi muốn lấy giá trị đầu ra của hàm cộng mộtTôi phải sử dụng phép gán giá trị trả về của hàm cho biến mà tôi lấy làm đối số.

Xem thêm bài viết hay:  Loop Mạng Là Gì - Cách Xác Port Bị Loop Trên Switch

Xem thêm: Ý nghĩa của từ Trench là gì? Ý nghĩa của Trench trong tiếng Việt

Truyền đối số theo tham chiếu (pass argument by reference) sẽ giúp chúng ta khắc phục 2 nhược điểm trên.

Nhắc lại khái niệm quy chiếu (reference)

Một biến tham chiếu (biến tham chiếu) được coi như một tên khác (tên nick hoặc tên bí danh) của một biến khác có cùng kiểu dữ liệu. Sau khi biến tham chiếu được khai báo và khởi tạo, nó sử dụng cùng một vùng bộ nhớ như biến mà nó tham chiếu.

Chúng tôi sử dụng toán tử đơn nguyên & để khai báo một biến tham chiếu:

int number = 5;int &reference = number;reference = 10; //thay đổi giá trị của biến number thông qua tham chiếu của nó << number << endl;Khi một trong hai biến bị hủy (biến tham chiếu hoặc biến gốc bị hủy do thoát khỏi khối mà nó được khai báo), vùng nhớ nơi mà 2 biến đang ở Kiểm soát này vẫn không bị hủy nếu có ít nhất 1 biến đang quản lý nó, cái bị hủy sẽ chỉ là tên biến.

int main(){ int n = 0; int &ref = n; { int n2 = 5; tham chiếu = n2; } cout << ref << endl; trả về 0;} Giống như ví dụ này, biến giới thiệu tham chiếu đến biến n2 trong khối lệnh con của chức năng chínhkhi thoát khỏi khối phụ, biến n2 bị hủy nhưng bộ nhớ được cấp cho nó vẫn còn đó và vẫn đang được biến đổi giới thiệu quản lý.

Cách thức hoạt động của một biến tham chiếu tương tự như việc xác định một hàm có tham số là một biến tham chiếu.

Truyền đối số bằng tham chiếu

Để truyền đối số cho hàm dưới dạng tham chiếu, chúng ta chỉ cần thêm toán tử & khi khai báo tham số cho hàm.

void addOne(int &value){value++;}Gọi lại thể hiện của hàm cộng một nhưng với cách khai báo tham số như một tham chiếu. Bây giờ, tại thời điểm gọi hàm cộng mộtchương trình sẽ không còn tạo một vùng nhớ riêng để nhận giá trị của đối số nữa mà nó sẽ tạo một biến tham chiếu và tham chiếu trực tiếp đến vùng nhớ của đối số.

Hãy xem kết quả của lời gọi hàm cộng một khi chuyển đối số làm tham chiếu.

*

Kết quả là giá trị của đối số đã được tăng thêm 1. Tại thời điểm gọi hàm cộng một, một tham chiếu được tạo để tham chiếu đến vùng nhớ của đối số. Sau khi thoát khỏi hàm, biến tham chiếu bị hủy, nhưng như mình đã nói ở trên, vẫn còn một biến (dùng làm đối số) đang quản lý vùng nhớ đó nên chỉ hủy tên của biến tham chiếu.

Như bạn có thể thấy, tôi đã xác định lại chức năng cộng một thành một hàm không có kiểu trả về, bởi vì giá trị đầu ra của nó đã được chính đối số trả về. Lợi dụng tính năng này, chúng ta có thể trả về nhiều giá trị cùng lúc chỉ với một lần gọi hàm.

Xem thêm bài viết hay:  " Mel Là Gì ? Nghĩa Của Từ Mel Trong Tiếng Việt Nghĩa Của Từ Mel

Trả về nhiều giá trị thông qua nhiều tham số

Đôi khi, chúng ta cần một hàm trả về nhiều giá trị trong khi sử dụng từ khóa return chỉ trả về một giá trị, đó là lúc chúng ta sử dụng một biến tham chiếu làm tham số cho hàm.

void getSinCos(float degree, float &sinOut, float &cosOut){float radian = degree * PI / 180.0;sinOut = sin(radian);cosOut = cos(radian);}Hàm getSinCos lấy đầu vào đầu tiên làm giá trị, trả về 2 xuất giá trị thông qua 2 biến tham chiếu.

int main(){float độ = 180.0, Sin, Cos;getSinCos(độ, Sin, Cos);cout << “sin = ” << Sin << endl;cout << “cos = ” << Cos << endl ;system(“tạm dừng”);return 0;}

bản tóm tắt

Truyền đối số cho hàm là một giá trị

Thuận lợi:

Giá trị làm đối số có thể là một giá trị xác định, giá trị của biến, biểu thức,… Các đối số truyền vào hàm sẽ không chịu tác động trực tiếp của hàm, đảm bảo an toàn dữ liệu khi sử dụng hàm.

Khuyết điểm:

Chương trình tạo các bản sao của giá trị, tiêu tốn nhiều bộ nhớ hơn. Cách duy nhất để có được đầu ra (đầu ra) thông qua từ khóa return với hàm có kiểu trả về. Không thể truyền mảng một chiều cho hàm theo giá trị.

Truyền đối số cho hàm dưới dạng tham chiếu

Thuận lợi:

Cho phép thay đổi giá trị của đối số. Chương trình không tạo các bản sao giá trị của đối số, vì vậy nó tiết kiệm bộ nhớ và hoạt động nhanh hơn. Nhiều giá trị có thể được trả về trong một lần gọi hàm.

Khuyết điểm:

Sử dụng tham số tham chiếu không hợp lệ có thể gây hỏng dữ liệu.

Hẹn gặp lại các bạn trong bài học tiếp theo của khóa học lập trình C++ định hướng thực hành.

Xem thêm: Chấp nhận là gì – Ý nghĩa của từ Chấp nhận

Mọi ý kiến ​​đóng góp hay thắc mắc có thể hỏi trực tiếp tại diễn đàn.

www.duhoc-o-canada.com.com

Liên kết video khóa học

https://www.udemy.com/c-co-ban-danh-cho-nguoi-moi-hoc-lap-trinh/learn/v4/overview

Bạn thấy bài viết Sự Khác Nhau Giữa Parameter Trong C# Là Gì, Sự Khác Biệt Giữa Một Đối Số Và Một Tham Số Là Gì có khắc phục đươc vấn đề bạn tìm hiểu ko?, nếu ko hãy comment góp ý thêm về Sự Khác Nhau Giữa Parameter Trong C# Là Gì, Sự Khác Biệt Giữa Một Đối Số Và Một Tham Số Là Gì bên dưới để duhoc-o-canada.com có thể thay đổi & cải thiện nội dung tốt hơn cho các bạn nhé! Cám ơn bạn đã ghé thăm Website: duhoc-o-canada.com của duhoc-o-canada.com

Nhớ để nguồn bài viết này: Sự Khác Nhau Giữa Parameter Trong C# Là Gì, Sự Khác Biệt Giữa Một Đối Số Và Một Tham Số Là Gì của website duhoc-o-canada.com

Chuyên mục: Là gì?

Viết một bình luận