C ++ Gọi theo địa chỉ và Gọi theo tham chiếu

C Call Address



C ++ là một ngôn ngữ lập trình đa năng linh hoạt. Ban đầu nó được tạo ra bởi Bjarne Stroustrup, một nhà khoa học máy tính người Đan Mạch, trở lại năm 1985. C ++ hỗ trợ các phương thức truyền ba tham số, tức là gọi theo giá trị, gọi theo địa chỉ và gọi theo tham chiếu. Trong bài viết này, chúng ta sẽ thảo luận về cuộc gọi theo địa chỉ và cuộc gọi theo cơ chế tham chiếu.

Hàm là gì?

Trước khi đi vào chủ đề thực tế, chúng ta cần hiểu hàm là gì trong C ++. Nhiều người trong số các bạn có thể đã quen thuộc với các hàm.







Một hàm về cơ bản là một đoạn mã có thể được sử dụng để thực hiện một tác vụ nhất định. Một hàm chủ yếu được sử dụng để giảm mã lặp lại trong chương trình C ++. Nó nhận đầu vào dưới dạng tham số và trả về đầu ra dưới dạng giá trị trả về. Nếu chúng ta xác định hàm một lần, chúng ta có thể gọi / sử dụng hàm nhiều lần trong phần sau của chương trình. Bằng cách đó, chúng tôi tiết kiệm rất nhiều mã lặp lại trong chương trình.



Mọi chương trình C ++ sẽ có hàm main (). Hàm main () là điểm vào của chương trình C ++. Ngoài hàm main (), lập trình viên có thể định nghĩa bao nhiêu hàm tùy thích.



Đây là cú pháp của việc xác định một hàm:





Return_type Function_Name(Danh sách tham số đầu vào)

Hàm trong C ++ có thể chấp nhận 0 hoặc nhiều hơn số lượng tham số đầu vào, trong khi nó chỉ có thể trả về một giá trị trả về.

Địa chỉ là gì?

Có hai loại biến trong C ++ (tương tự như ngôn ngữ C) - Biến dữ liệu và Biến địa chỉ. Biến địa chỉ được sử dụng để lưu trữ địa chỉ của một biến dữ liệu khác. Ví dụ: hãy xem xét đoạn mã sau:



NStôi= 100;
NS *ptr= &tôi;

Ở đây, câu lệnh đầu tiên cho chúng ta biết rằng biến i là một biến dữ liệu và nó đang lưu trữ giá trị 100. Trong câu lệnh thứ hai, chúng ta đang khai báo một biến con trỏ, tức là ptr, và khởi tạo nó bằng địa chỉ của biến i.

Tham chiếu là gì?

Tham chiếu là một tính năng mạnh mẽ khác của ngôn ngữ C ++. Hãy xem xét đoạn mã sau:

NSđến= 200;
NS &NS=đến;

Trong ví dụ này, chúng tôi đã khai báo một số nguyên, tức là a và sau đó khai báo một biến tham chiếu r, được khởi tạo với giá trị của a. Vì vậy, biến tham chiếu không là gì khác ngoài bí danh của một biến khác.

Các phương thức truyền tham số:

Có ba loại phương thức truyền tham số trong ngôn ngữ C ++:

  1. Gọi theo giá trị / Chuyển theo giá trị
  2. Gọi theo địa chỉ / Chuyển theo địa chỉ
  3. Gọi theo tham chiếu / Chuyển qua tham chiếu

Trong bài viết này, chúng tôi đang thảo luận về - Gọi theo địa chỉ và Gọi theo tham chiếu.

Call By Address / Pass by address là gì?

Trong trường hợp của phương thức Gọi theo địa chỉ / Truyền theo địa chỉ, các đối số của hàm được chuyển dưới dạng địa chỉ. Hàm người gọi chuyển địa chỉ của các tham số. Biến con trỏ được sử dụng trong định nghĩa hàm. Với sự trợ giúp của phương thức Gọi theo địa chỉ, hàm có thể truy cập các tham số thực tế và sửa đổi chúng. Chúng ta sẽ xem một ví dụ về phương thức Gọi theo địa chỉ ở phần sau của bài viết này.

Call By Reference / Pass by reference là gì?

Trong phương thức Gọi theo tham chiếu / Truyền theo tham chiếu, các tham số hàm được truyền dưới dạng tham chiếu. Bên trong định nghĩa hàm, các tham số thực tế được truy cập bằng cách sử dụng biến tham chiếu.

Ví dụ:

Bây giờ, vì chúng ta đã hiểu khái niệm về các phương thức truyền tham số, chúng ta sẽ thấy một số chương trình ví dụ để hiểu cơ chế truyền tham số trong C ++:

  1. Ví dụ-1 - Gọi theo địa chỉ (1)
  2. Ví dụ-2 - Gọi theo địa chỉ (2)
  3. Ví dụ-3 - Gọi theo Tham chiếu (1)
  4. Ví dụ-4 - Gọi bằng Tham chiếu (2)

Hai ví dụ đầu tiên được đưa ra để giải thích cách hoạt động của phương thức Gọi theo địa chỉ trong C ++. Hai ví dụ cuối cùng là để giải thích Cuộc gọi bằng khái niệm tham chiếu.

Ví dụ-1 - Gọi theo địa chỉ (1)

Trong ví dụ này, chúng tôi sẽ chứng minh cơ chế gọi theo địa chỉ. Từ hàm main (), chúng ta đang gọi hàm hello () và chuyển địa chỉ của var. Trong định nghĩa hàm, chúng ta đang nhận địa chỉ của var trong một biến con trỏ, tức là, p. Bên trong hàm hello, giá trị của var đang được thay đổi thành 200 với sự trợ giúp của con trỏ. Do đó, giá trị của var sẽ được thay đổi thành 200 bên trong hàm main () sau khi gọi hàm hello ().

#bao gồm
sử dụng không gian têngiờ;

vô hiệuxin chào(NS *P)
{
Giá cả <<endl<< 'Bên trong hàm hello ():' <<endl;
Giá cả << 'Giá trị của * p =' << *P<<endl;
*P= 200;
Giá cả << 'Giá trị của * p =' << *P<<endl;
Giá cả << 'Thoát khỏi hàm hello ().' <<endl;
}

NSchủ chốt()
{
NSở đâu= 100;
Giá cả << 'Giá trị của var bên trong hàm main () =' <<ở đâu<<endl;

xin chào(&ở đâu);

Giá cả <<endl<< 'Giá trị của var bên trong hàm main () =' <<ở đâu<<endl;

trở lại 0;
}

Ví dụ-2 - Gọi theo địa chỉ (2)

Đây là một ví dụ khác về cuộc gọi theo phương thức địa chỉ. Trong ví dụ này, chúng tôi sẽ giải thích cách gọi phương thức địa chỉ có thể được sử dụng để giải quyết một vấn đề trong đời thực. Ví dụ, chúng ta muốn viết một hàm để hoán đổi hai biến. Nếu chúng ta sử dụng cơ chế gọi theo giá trị để hoán đổi hai biến, các biến thực tế sẽ không được hoán đổi trong hàm người gọi. Phương thức gọi theo địa chỉ có thể được sử dụng trong trường hợp như vậy. Trong ví dụ này, chúng tôi đang chuyển địa chỉ của cả var_1 (& var_1) và var_2 (& var_2) vào hàm mySwap (). Bên trong hàm mySwap (), chúng ta đang hoán đổi giá trị của hai biến này với sự trợ giúp của các con trỏ. Như bạn có thể thấy trong đầu ra bên dưới, giá trị thực của các biến này sẽ được hoán đổi trong hàm main () sau khi hàm mySwap () được thực thi.

#bao gồm
sử dụng không gian têngiờ;

vô hiệumySwap(NS *vptr_1,NS *vptr_2)
{
NStemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

NSchủ chốt()
{
NSvar_1= 100;
NSvar_2= 300;

Giá cả << 'Trước khi gọi hàm mySwap (), giá trị của var_1:' <<var_1<<endl;
Giá cả << 'Trước khi gọi hàm mySwap (), giá trị của var_2:' <<var_2<<endl<<endl;

Giá cả << 'Gọi hàm mySwap () - Gọi theo địa chỉ.' <<endl<<endl;
mySwap(&var_1,&var_2);

Giá cả << 'Sau khi gọi hàm mySwap (), giá trị của var_1:' <<var_1<<endl;
Giá cả << 'Sau khi gọi hàm mySwap (), giá trị của var_2:' <<var_2<<endl;

trở lại 0;
}

Ví dụ-3 - Gọi theo Tham chiếu (1)

Trong ví dụ này, chúng tôi sẽ chứng minh cách hoạt động của lệnh gọi bằng tham chiếu trong C ++. Trong định nghĩa hàm hello (), giá trị đang được nhận dưới dạng một biến tham chiếu (& p). Với sự trợ giúp của biến tham chiếu (tức là p), chúng ta có thể thay đổi giá trị của tham số thực (var) bên trong hàm main ().

#bao gồm
sử dụng không gian têngiờ;

vô hiệuxin chào(NS &P)
{
Giá cả <<endl<< 'Bên trong hàm hello ():' <<endl;
Giá cả << 'Giá trị của p =' <<P<<endl;
P= 200;
Giá cả << 'Giá trị của p =' <<P<<endl;
Giá cả << 'Thoát khỏi hàm hello ().' <<endl;
}

NSchủ chốt()
{
NSở đâu= 100;
Giá cả << 'Giá trị của var bên trong hàm main () =' <<ở đâu<<endl;

xin chào(ở đâu);

Giá cả <<endl<< 'Giá trị của var bên trong hàm main () =' <<ở đâu<<endl;

trở lại 0;
}

Ví dụ-4 - Gọi bằng Tham chiếu (2)

Đây là một ví dụ khác về cuộc gọi bằng cách tham chiếu. Trong ví dụ này, chúng tôi sẽ chứng minh cách gọi bằng tham chiếu hoạt động trong C ++ với sự trợ giúp của một ví dụ trong thế giới thực. Hàm mySwap () được gọi từ hàm main () với các tham số sau - var_1 và var_2. Bên trong hàm mySwap (), chúng ta đang nhận các tham số dưới dạng các biến tham chiếu.

#bao gồm
sử dụng không gian têngiờ;

vô hiệumySwap(NS &vref_1,NS &vref_2)
{
NStemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

NSchủ chốt()
{
NSvar_1= 100;
NSvar_2= 300;

Giá cả << 'Trước khi gọi hàm mySwap (), giá trị của var_1:' <<var_1<<endl;
Giá cả << 'Trước khi gọi hàm mySwap (), giá trị của var_2:' <<var_2<<endl<<endl;

Giá cả << 'Gọi hàm mySwap () - Gọi bằng tham chiếu.' <<endl<<endl;
mySwap(var_1, var_2);

Giá cả << 'Sau khi gọi hàm mySwap (), giá trị của var_1:' <<var_1<<endl;
Giá cả << 'Sau khi gọi hàm mySwap (), giá trị của var_2:' <<var_2<<endl;

trở lại 0;
}

Phần kết luận

Hiểu các phương thức truyền tham số trong C ++ là rất quan trọng. Ngôn ngữ lập trình C chỉ hỗ trợ Gọi theo giá trị và Gọi theo địa chỉ. Nhưng, C ++ hỗ trợ Gọi bằng tham chiếu cùng với hai cơ chế trước đó. Trong bài viết này, chúng tôi đã xem một số ví dụ làm việc để hiểu khái niệm Gọi theo địa chỉ và Gọi theo tham chiếu. Gọi theo địa chỉ là một phương pháp rất mạnh và phổ biến trong các ứng dụng miền nhúng.