Pointer là gì

     

Trong C++, có một khái niệm rất hay cơ mà khá cạnh tranh hiểu khi bắt đầu lập trình là con trỏ (pointer). Để tìm hiểu về con trỏ, chúng ta cần nắm vững về bộ nhớ lưu trữ của thay đổi trong lập trình. Các chúng ta có thể đọc lại bài nắm rõ về bộ nhớ lưu trữ của biến trong C++.

Bạn đang xem: Pointer là gì

1. Khái niệm nhỏ trỏ

Nhớ lại bộ nhớ lưu trữ lưu trữ biếnBộ lưu giữ RAM chứa không ít ô nhớ, mỗi ô nhớ tất cả kích thước 1 byte.Mỗi ô nhớ có địa chỉ duy nhất và địa chỉ cửa hàng này được đặt số từ 0 trở đi. Giả dụ CPU 32 bit thì bao gồm 2^32 add có thể đánh cho những ô lưu giữ trong RAM.
*

Khi khai báo biến, trình biên dịch dành riêng một vùng nhớ với showroom duy nhất nhằm lưu biến. Trình biên dịch có trọng trách liên kết địa chỉ cửa hàng ô nhớ đó với tên biến. Khi điện thoại tư vấn tên biến, nó đang truy xuất tự động hóa đến ô lưu giữ đã link với thương hiệu biến để lấy dữ liệu. Chúng ta phải luôn phân biệt giữa địa chỉ cỗ nhớ với dữ liệu được lưu trong đó.
*

Có thể lấy địa chỉ cửa hàng của một biến bằng cách sử dụng toán tử &.int a;cout Address of a: 00F6FDFCĐịa chỉ của biến thực chất cũng là một con số hay được màn trình diễn ở hệ cơ số 16. Ta hoàn toàn có thể sử dụng con trỏ (pointer) để lưu showroom của các biến.Con trỏ là gì?Trong ngôn từ C++, con trỏ (pointer) là những phát triển thành lưu trữ showroom bộ nhớ của rất nhiều biến khác.

Xem thêm: Sàn Uk Trade Là Gì ? Đánh Giá Khách Quan Sàn Giao Dịch Uk Trade


*

Trong hình trên, thay đổi var lưu giá trị 5 có địa chỉ là 0x61ff08. Biến đổi pointVarbiến con trỏ, lưu địa chỉ của biến var (trỏ mang đến vùng nhớ của đổi thay var), có nghĩa là nó lưu giá trị 0x61ff08.

2. Khai báo với khởi tạo biến con trỏ

Cú pháp khai báo biến bé trỏ *;Ví dụ:char *ch1, *ch2;int *p1, p2;ch1 với ch2 là biến bé trỏ, trỏ cho tới vùng nhớ kiểu char (1 byte). p1 là biến con trỏ, trỏ cho tới vùng lưu giữ kiểu int (4 bytes), còn p2 là trở nên kiểu int bình thường.Khởi chế tạo ra biến con trỏMột biến ngẫu nhiên phải xác minh 2 thứ: địa chỉ của biến với giá trị của biến. Biến con trỏ cũng thế.Khi new khai báo, biến bé trỏ được đặt ở địa chỉ cửa hàng nào đó (không biết trước), cất giá trị là một địa chỉ không xác định hoặc địa chỉ cửa hàng 0xCCCCCCCC – là địa chỉ cửa hàng đặc biệt, cho biết thêm con trỏ chưa được khởi tạo. áp dụng toán tử & nhằm đặt showroom của một biến vào nhỏ trỏ.Cú pháp: = &;Ví dụ:int a, b;int *pa, *pb;pa = &a;pb = &b;Con trỏ NULLCon trỏ NULL là nhỏ trỏ lưu địa chỉ cửa hàng 0x00000000. Tức showroom bộ ghi nhớ 0, có ý nghĩa đặc biệt, cho thấy con trỏ ko trỏ vào đâu cả.int *p2;//con trỏ chưa khởi tạo, vẫn trỏ cho một vùng lưu giữ nào kia không xác địnhint *p3 = NULL;//con trỏ null không trỏ mang lại vùng lưu giữ nào

3. Thực hiện biến con trỏ

Ví dụ có những khai báo:int a = 5;int *pa = &a;Nắm rõ luật lệ sau: *pa và a đều chỉ giá trị của phát triển thành a, pa với &a đều chỉ showroom của biến đổi a, &pa là lấy add của biến bé trỏ pa.#include using namespace std;int main() {int a = 5;int *pa;pa = &a;//Dia chicoutKết quảGia tri cua bien bé tro page authority la dia chi cua bien a:00AFF948Dia đưa ra cua bien a ma bien nhỏ tro page authority tro den:00AFF948Gia tri vung nho ma bien nhỏ tro pa tro den:5Gia tri cua bien a ma bien nhỏ tro pa tro den:5Dia đưa ra cua bien nhỏ tro pa:00AFF93C

4. Kích cỡ của bé trỏ

Ví dụ những khai báo bé trỏ sau:char *p1;int *p2;float *p3;double *p4;Kích thước của những biến bé trỏ có khác biệt không? con trỏ chỉ lưu địa chỉ cửa hàng nên kích thước của mọi bé trỏ là như nhau. Kích cỡ này phụ thuộc vào môi trường hệ thống máy tính:Môi ngôi trường MS-DOS 16 bit: 2 bytesMôi trường Windows 32 bit: 4 bytesMôi ngôi trường Windows 64 bit: 8 bytesChương trình xem kích thước của nhỏ trỏ#include using namespace std;int main() {char *p1;int *p2;float *p3;double *p4;coutKết trái trên Windows 64 bitSize of char type pointer:8 bytesSize of int type pointer:8 bytesSize of float type pointer:8 bytesSize of double type pointer:8 bytes

5. Một số xem xét khi áp dụng con trỏ

Khi khởi tạo nhỏ trỏ NULLChữ NULL phải viết hoa, viết thường null sẽ bị lỗi.int *p1 = NULL;//đúngint *p2 = null;//lỗiKhông nên thực hiện con trỏ khi không được khởi tạoKết quả tính toán rất có thể sẽ phân phát sinh phần nhiều lỗi không lường trước được nếu chưa khởi tạo bé trỏ.int a = 5, *pa;pa = &a;//được khởi tạoint *pb;//phải khởi tạoSử dụng biến bé trỏ không đúng cáchint var, *varPoint;// lỗi // varPoint là add nhưng var không phải địa chỉvarPoint = var;// lỗi// &var là địa chỉ// *varPoint là giá trị được lưu trữ trong var*varPoint = &var;// đúng // varPoint là địa chỉ cửa hàng và &var cũng là địa chỉvarPoint = &var; // đúng// *varPoint cùng var phần lớn là giá chỉ trị*varPoint = var;Khi thay đổi giá trị vào vùng nhớXem ví dụ sau:#include using namespace std;int main() {int *pa;int a=5;pa=&a;//pa lưu địa chỉ cửa hàng của thay đổi a*pa=100;//thay đổi quý giá trong vùng nhớ nhưng pa lưu lại trữcoutKết quảGia tri cua a:100Tên biến hóa chỉ đại diện mang đến vùng nhớ, hoàn toàn có thể truy xuất hoặc biến hóa giá trị vào vùng nhớ đó. Vì chưng đó, khi cực hiếm trong vùng nhớ biến đổi thì giá trị truy nã xuất được thông qua tên biến cũng thay đổi.Con trỏ là tư tưởng quan trọng khó nhất vào C/C++. Mức độ thành thạo C/C++ được đánh giá qua nút độ thực hiện con trỏ. Vày đó, chúng ta cố gắng nắm rõ và rèn luyện cách sử dụng con trỏ nhé.

Xem thêm: Sơ Đồ Tư Duy Chương 3 Vật Lý 11 Dòng Điện Trong Các Môi Trường

Nếu có bất kể thắc mắc nào, chúng ta cứ comment bên dưới, mình sẽ giải đáp cho các bạn.
Bài trước và bài bác sau vào môn học>" data-wpel-link="internal">Sự đối sánh giữa bé trỏ và mảng trong C++ >>