Sự khác biệt giữa con trỏ và mảng

Con trỏ vs Mảng

Con trỏ là kiểu dữ liệu chứa tham chiếu đến vị trí bộ nhớ (nghĩa là biến con trỏ lưu địa chỉ của vị trí bộ nhớ trong đó một số dữ liệu được lưu trữ). Mảng là cấu trúc dữ liệu được sử dụng phổ biến nhất để lưu trữ một tập hợp các phần tử. Hầu hết các ngôn ngữ lập trình cung cấp các phương thức để dễ dàng khai báo mảng và các phần tử truy cập trong mảng.

Con trỏ là gì?

Con trỏ là kiểu dữ liệu lưu trữ địa chỉ của một vị trí bộ nhớ trong đó một số dữ liệu được lưu trữ. Nói cách khác, một con trỏ giữ tham chiếu đến một vị trí bộ nhớ. Truy cập dữ liệu được lưu trữ trong vị trí bộ nhớ được tham chiếu bởi con trỏ được gọi là hội thảo. Khi thực hiện các hoạt động lặp đi lặp lại như đi ngang qua cây / chuỗi, tra cứu bảng, v.v., sử dụng con trỏ sẽ cải thiện hiệu suất. Điều này là do hội thảo và sao chép con trỏ rẻ hơn so với thực tế sao chép và truy cập dữ liệu được trỏ bởi con trỏ. Một con trỏ null là một con trỏ không trỏ đến bất cứ thứ gì. Trong Java, việc truy cập một con trỏ rỗng sẽ tạo ra một ngoại lệ gọi là NullPulumException.

Mảng là gì?

Hiển thị trong hình 1, là một đoạn mã thường được sử dụng để khai báo và gán giá trị cho một mảng. Hình 2 mô tả một mảng trông như thế nào trong bộ nhớ.

giá trị int [5];

giá trị [0] = 100;

giá trị [1] = 101;

giá trị [2] = 102;

giá trị [3] = 103;

các giá trị [4] = 104;

Hình 1: Mã để khai báo và gán giá trị cho một mảng


100 101 102 103 104
Chỉ số: 0 1 2 3 4

Hình 2: Mảng được lưu trữ trong bộ nhớ

Đoạn mã trên xác định một mảng có thể lưu trữ 5 số nguyên và chúng được truy cập bằng cách sử dụng các chỉ số từ 0 đến 4. Một thuộc tính quan trọng của một mảng là, toàn bộ mảng được phân bổ thành một khối bộ nhớ duy nhất và mỗi phần tử có không gian riêng trong mảng . Khi một mảng được xác định, kích thước của nó được cố định. Vì vậy, nếu bạn không chắc chắn về kích thước của mảng tại thời điểm biên dịch, bạn sẽ phải xác định một mảng đủ lớn để ở bên an toàn. Nhưng, hầu hết thời gian, chúng tôi thực sự sẽ sử dụng số lượng phần tử ít hơn số lượng chúng tôi đã phân bổ. Vì vậy, một lượng đáng kể bộ nhớ thực sự bị lãng phí. Mặt khác, nếu mảng đủ lớn, thì không đủ lớn, chương trình sẽ bị sập.

Sự khác biệt giữa con trỏ và mảng?

Con trỏ là kiểu dữ liệu lưu trữ địa chỉ của một vị trí bộ nhớ trong đó một số dữ liệu được lưu trữ, trong khi Mảng là cấu trúc dữ liệu được sử dụng phổ biến nhất để lưu trữ một tập hợp các phần tử. Trong ngôn ngữ lập trình C, lập chỉ mục mảng được thực hiện bằng cách sử dụng số học con trỏ (tức là phần tử thứ i của mảng x sẽ tương đương với * (x + i)). Do đó, trong C, tập hợp các con trỏ trỏ đến một tập hợp các vị trí bộ nhớ liên tiếp, có thể được coi là một mảng. Hơn nữa, có một sự khác biệt trong cách toán tử sizeof hoạt động trên các con trỏ và mảng. Khi được áp dụng cho một mảng, toán tử sizeof sẽ trả về toàn bộ kích thước của mảng, trong khi đó khi áp dụng cho một con trỏ, nó sẽ chỉ trả về kích thước của con trỏ.