Con trỏ C ++

Con trỏ C ++ rất dễ học và thú vị. Một số tác vụ C ++ được thực hiện dễ dàng hơn với con trỏ và các tác vụ C ++ khác, chẳng hạn như cấp phát bộ nhớ động, không thể thực hiện được nếu không có chúng.

Như bạn đã biết, mọi biến đều là một vị trí bộ nhớ và mọi vị trí bộ nhớ đều có địa chỉ của nó được xác định có thể được truy cập bằng cách sử dụng toán tử dấu và (&) biểu thị một địa chỉ trong bộ nhớ. Hãy xem xét phần sau sẽ in ra địa chỉ của các biến được xác định:

#include <iostream>

using namespace std;
int main () {
   int  var1;
   char var2[10];

   cout << "Address of var1 variable: ";
   cout << &var1 << endl;

   cout << "Address of var2 variable: ";
   cout << &var2 << endl;

   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Address of var1 variable: 0xbfebd5c0
Address of var2 variable: 0xbfebd5b6

Con trỏ là gì?

A pointerlà một biến có giá trị là địa chỉ của một biến khác. Giống như bất kỳ biến hoặc hằng số nào, bạn phải khai báo một con trỏ trước khi bạn có thể làm việc với nó. Dạng chung của khai báo biến con trỏ là:

type *var-name;

Đây, typelà kiểu cơ sở của con trỏ; nó phải là loại C ++ hợp lệ vàvar-namelà tên của biến con trỏ. Dấu hoa thị bạn đã sử dụng để khai báo một con trỏ giống với dấu hoa thị mà bạn sử dụng cho phép nhân. Tuy nhiên, trong câu lệnh này, dấu hoa thị được sử dụng để chỉ định một biến làm con trỏ. Sau đây là khai báo con trỏ hợp lệ:

int    *ip;    // pointer to an integer
double *dp;    // pointer to a double
float  *fp;    // pointer to a float
char   *ch     // pointer to character

Kiểu dữ liệu thực tế của giá trị của tất cả các con trỏ, cho dù là số nguyên, số thực, ký tự hay cách khác, đều giống nhau, một số thập lục phân dài đại diện cho địa chỉ bộ nhớ. Sự khác biệt duy nhất giữa các con trỏ của các kiểu dữ liệu khác nhau là kiểu dữ liệu của biến hoặc hằng số mà con trỏ trỏ tới.

Sử dụng con trỏ trong C ++

Có một số thao tác quan trọng mà chúng tôi sẽ thực hiện với các con trỏ rất thường xuyên. (a) Chúng tôi xác định một biến con trỏ. (b) Gán địa chỉ của một biến cho một con trỏ. (c)Cuối cùng là truy cập giá trị tại địa chỉ có sẵn trong biến con trỏ. Điều này được thực hiện bằng cách sử dụng toán tử một ngôi * trả về giá trị của biến nằm tại địa chỉ được chỉ định bởi toán hạng của nó. Ví dụ sau sử dụng các thao tác này:

#include <iostream>

using namespace std;

int main () {
   int  var = 20;   // actual variable declaration.
   int  *ip;        // pointer variable 

   ip = &var;       // store address of var in pointer variable

   cout << "Value of var variable: ";
   cout << var << endl;

   // print the address stored in ip pointer variable
   cout << "Address stored in ip variable: ";
   cout << ip << endl;

   // access the value at the address available in pointer
   cout << "Value of *ip variable: ";
   cout << *ip << endl;

   return 0;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả như sau:

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

Con trỏ trong C ++

Con trỏ có nhiều khái niệm nhưng dễ và chúng rất quan trọng đối với lập trình C ++. Có một vài khái niệm con trỏ quan trọng sau đây mà một lập trình viên C ++ phải rõ ràng:

Sr.No Khái niệm & Mô tả
1 Con trỏ rỗng

C ++ hỗ trợ con trỏ null, là một hằng số có giá trị bằng 0 được xác định trong một số thư viện tiêu chuẩn.

2 Số học con trỏ

Có bốn toán tử số học có thể được sử dụng trên con trỏ: ++, -, +, -

3 Con trỏ so với Mảng

Có một mối quan hệ chặt chẽ giữa con trỏ và mảng.

4 Mảng con trỏ

Bạn có thể xác định mảng để chứa một số con trỏ.

5 Con trỏ tới con trỏ

C ++ cho phép bạn có con trỏ trên một con trỏ, v.v.

6 Chuyển con trỏ đến các hàm

Truyền một đối số theo tham chiếu hoặc theo địa chỉ đều cho phép đối số đã truyền được thay đổi trong hàm gọi bởi hàm được gọi.

7 Con trỏ trả về từ các hàm

C ++ cho phép một hàm trả về một con trỏ tới biến cục bộ, biến tĩnh và cả bộ nhớ được cấp phát động.