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

Tác Giả: Laura McKinney
Ngày Sáng TạO: 1 Tháng Tư 2021
CậP NhậT Ngày Tháng: 5 Có Thể 2024
Anonim
Sự khác biệt giữa mảng và con trỏ - Công Nghệ
Sự khác biệt giữa mảng và con trỏ - Công Nghệ

NộI Dung


Có một mối quan hệ chặt chẽ giữa mảng và con trỏ. Con trỏ có thể được sử dụng để truy cập các phần tử mảng, truy cập toàn bộ mảng bằng số học con trỏ, giúp truy cập nhanh hơn. Có một sự khác biệt cơ bản giữa một con trỏ và một mảng, đó là một tập hợp các biến có kiểu dữ liệu tương tự trong khi con trỏ là một biến lưu trữ địa chỉ của một biến khác. Có một số khác biệt khác giữa một mảng và một con trỏ được thảo luận dưới đây trong biểu đồ so sánh.

  1. Biểu đồ so sánh
  2. Định nghĩa
  3. Sự khác biệt chính
  4. Phần kết luận

Biểu đồ so sánh

Cơ sở để so sánhMảngCon trỏ
Tờ khai// Trong C ++
gõ var_name;
// Trong Java.
gõ tên var;
var_name = loại mới;
// Trong C ++
gõ * var_name;
Đang làm việcLưu trữ giá trị của biến kiểu dữ liệu đồng nhất.Lưu địa chỉ của một biến khác của kiểu dữ liệu tương tự như kiểu con trỏ biến kiểu dữ liệu.
Thế hệMột loạt các con trỏ có thể được tạo ra.Một con trỏ tới một mảng có thể được tạo ra.
Hỗ trợ JavaHỗ trợ khái niệm mảng.Không hỗ trợ con trỏ.
Lưu trữMột mảng bình thường lưu trữ các giá trị của biến và mảng con trỏ lưu địa chỉ của các biến.Con trỏ được thiết kế đặc biệt để lưu trữ địa chỉ của các biến.
Sức chứaMột mảng có thể lưu trữ số lượng phần tử, được đề cập trong kích thước của biến mảng. Một biến con trỏ có thể lưu trữ địa chỉ của một biến duy nhất tại một thời điểm.


Định nghĩa của mảng

Một mảng là tập hợp các phần tử của cùng một kiểu dữ liệu và tất cả các phần tử này được gọi bằng một tên chung, là tên của một biến mảng. Một phần tử mảng cụ thể có thể được truy cập bằng cách truy cập vào chỉ mục cụ thể của mảng đó nơi phần tử đó được lưu trữ. Các phần tử có thể là một mảng một chiều, một mảng hai chiều hoặc mảng đa chiều. Một mảng các con trỏ cũng có thể được tạo, tức là một mảng chứa tất cả các biến là biến con trỏ. Trong ‘C ++, các mảng được phân bổ tĩnh trong khi đó, trong Java Java, các mảng được phân bổ động.

// Trong C ++ gõ var_name; // Trong Java. gõ tên var; var_name = loại mới;

Ở đây 'type' biểu thị kiểu dữ liệu của biến mảng, 'var_name' biểu thị tên được đặt cho biến mảng, 'size' biểu thị khả năng của biến mảng, nghĩa là có thể lưu trữ bao nhiêu phần tử của 'loại' trong biến mảng đó . Có hai phương pháp truy cập vào một mảng, thứ nhất ‘con trỏ số học và thứ hai’ chỉ mục mảng thứ hai, trong đó con trỏ số học con trỏ nhanh hơn.


// truy cập bằng con trỏ số học Void display_array (int * S) {while (* s) {cout (<< "value là" << * s); * s ++; }}

Sử dụng con trỏ số học sẽ hoạt động nhanh hơn so với lập chỉ mục mảng, tức là truy cập biến mảng bằng chỉ mục của nó. Nếu bạn cần truyền một mảng các con trỏ vào một hàm, nó có thể được thực hiện bằng cách sử dụng cùng một phương thức bạn sử dụng để truyền một mảng bình thường, tức là gọi trực tiếp hàm với tên của mảng, mà không có bất kỳ chỉ mục nào.

Hãy để chúng tôi hiểu nó với ví dụ

// Khai báo mảng con trỏ. int * p;

Ở đây, nó cho thấy, ‘p là một mảng kiểu số nguyên, nó sẽ giữ địa chỉ của 10 biến kiểu số nguyên. Hãy để chúng tôi chuyển mảng con trỏ ở trên vào một hàm hiển thị ().

hiển thị (p); // Gọi hiển thị chức năng. void display (int * d) {// Hàm nhận mảng con trỏ. for (int i = 0; i <10; i ++) {cout << ("chỉ mục" <

Hàm này sẽ hiển thị các giá trị, hiện diện trong các biến, có địa chỉ được lưu trữ trong mảng con trỏ này một cách tuần tự.

Định nghĩa con trỏ

Con trỏ là một biến chứa địa chỉ bộ nhớ của một biến khác. Kiểu dữ liệu của cả hai, biến con trỏ và biến có địa chỉ đang được gán cho biến con trỏ, phải giống nhau. Biến con trỏ được khai báo như sau.

// Khai báo theo kiểu C ++ * tên;

Ở đây, ’type, là một kiểu dữ liệu,‘ tên là tên của biến con trỏ. Kiểu ’loại xác định loại địa chỉ biến có thể được lưu trữ trong biến con trỏ. Ví dụ, con trỏ số nguyên sẽ lưu trữ địa chỉ của biến số nguyên. Có hai toán tử con trỏ ’* và và &. Toán tử ‘* Hồi trả về giá trị nằm ở địa chỉ, được lưu trong biến theo sau là dấu’ *. Toán tử ‘& hung trả về địa chỉ của biến theo sau dấu’ &.

// ví dụ int b = 10 int a = & b; // Ở đây địa chỉ của b được lưu trong biến a. // cho phép địa chỉ của b là 2000, vì vậy bây giờ a = 2000. int c = * a; // Ở đây, biến con trỏ nguyên * a sẽ trả về giá trị được đặt tại địa chỉ được lưu trong a .ie. c = 10.

Chỉ có hai toán tử số học mà bạn có thể sử dụng trên các con trỏ, tức là cộng và trừ. Nếu bạn áp dụng gia số trên một biến con trỏ nguyên, nó sẽ được tăng theo kích thước của kiểu dữ liệu tức là 2 byte, vì nó là một con trỏ nguyên, khi tăng nó sẽ phải trỏ biến số nguyên tiếp theo. Tương tự là trường hợp giảm.

// p là một con trỏ nguyên giá trị containg 2000. p ++; // bây giờ p = 2002. p--; // bây giờ p lại chứa 2000 khi giảm hai byte.

  1. Một mảng lưu trữ các biến của các kiểu dữ liệu tương tự và các kiểu dữ liệu của các biến phải khớp với kiểu của mảng. Mặt khác, biến con trỏ lưu địa chỉ của một biến, có kiểu tương tự như một loại kiểu biến con trỏ.
  2. Chúng ta có thể tạo ra một mảng các con trỏ, tức là mảng có các biến là các biến con trỏ. Mặt khác, chúng ta có thể tạo một con trỏ trỏ đến một mảng.
  3. Java hỗ trợ mảng, nhưng nó không hỗ trợ con trỏ.
  4. Một kích thước mảng quyết định số lượng biến nó có thể lưu trữ trong khi; một biến con trỏ có thể lưu trữ địa chỉ của biến

Ghi chú:

Java không hỗ trợ hoặc tuyệt đối tránh các con trỏ.

Phần kết luận:

Khi chúng ta cần làm việc trên các phần tử dữ liệu có kiểu dữ liệu tương tự, thay vì làm việc riêng trên các biến, chúng ta có thể tạo một mảng các biến có kiểu dữ liệu tương tự và sau đó hoạt động trên nó. Con trỏ là cần thiết cho một số chương trình, nó mang lại sức mạnh to lớn, nhưng thật không may, nếu một con trỏ chứa giá trị không chính xác, nó sẽ là lỗi khó tìm nhất.