Computer >> Máy Tính >  >> Lập trình >> lập trình C

Giải thích con trỏ và mảng một chiều bằng ngôn ngữ C

Con trỏ là một biến lưu trữ địa chỉ của một biến khác.

Tính năng

Các tính năng của con trỏ được giải thích bên dưới -

  • Con trỏ tiết kiệm dung lượng bộ nhớ.
  • Thời gian thực thi của con trỏ nhanh hơn do truy cập trực tiếp vào vị trí bộ nhớ.
  • Với sự trợ giúp của con trỏ, bộ nhớ được truy cập hiệu quả, tức là bộ nhớ được cấp phát và phân bổ động.
  • Con trỏ được sử dụng với cấu trúc dữ liệu.

Khai báo, khởi tạo và truy cập con trỏ

Hãy xem xét tuyên bố sau -

int qty = 179;

Trong bộ nhớ, biến có thể được biểu diễn như sau -

Giải thích con trỏ và mảng một chiều bằng ngôn ngữ C

Khai báo một con trỏ

Nó có nghĩa là ‘p’ là một biến con trỏ giữ địa chỉ của một biến số nguyên khác, như được đề cập trong câu lệnh bên dưới -

Int *p;

Khởi tạo con trỏ

Toán tử địa chỉ (&) được sử dụng để khởi tạo một biến con trỏ.

Ví dụ -

int qty = 175;
int *p;
p= &qty;

Giải thích con trỏ và mảng một chiều bằng ngôn ngữ C

Truy cập một biến thông qua con trỏ của nó

Để truy cập giá trị của một biến, toán tử hướng (*) được sử dụng.

Ví dụ -

Giải thích con trỏ và mảng một chiều bằng ngôn ngữ C

Ở đây, ‘*’ có thể được coi là giá trị tại địa chỉ.

Hai câu lệnh tương đương nhau bởi câu lệnh sau -

p = &qty;
n = *p; n =qty

Con trỏ và mảng một chiều

  • Trình biên dịch phân bổ các vị trí bộ nhớ liên tục cho tất cả các phần tử của mảng.
  • Địa chỉ cơ sở =địa chỉ phần tử đầu tiên (chỉ số 0) của mảng.
    • Ví dụ - int a [5] ={10, 20,30,40,50};

Các phần tử

Năm yếu tố được lưu trữ như sau -

Giải thích con trỏ và mảng một chiều bằng ngôn ngữ C

  • Nếu ‘p’ được khai báo là con trỏ số nguyên, thì một mảng ‘a’ có thể được trỏ bởi phép gán sau -

p = a;
(or) p = &a[0];
  • Mọi giá trị của 'a' đều được truy cập bằng cách sử dụng p ++ để di chuyển từ phần tử này sang phần tử khác. Khi một con trỏ được tăng lên, giá trị của nó được tăng lên theo kích thước của kiểu dữ liệu mà nó trỏ tới. Độ dài này được gọi là "hệ số tỷ lệ".

  • Mối quan hệ giữa 'p' và 'a' được giải thích bên dưới -

P = &a[0] = 1000
P+1 = &a[1] = 1004
P+2 = &a[2] = 1008
P+3 = &a[3] = 1012
P+4 = &a[4] = 1016
  • Địa chỉ của một phần tử được tính bằng cách sử dụng chỉ số của nó và hệ số tỷ lệ của kiểu dữ liệu. Dưới đây là một ví dụ để giải thích điều này.

Address of a[3] = base address + (3* scale factor of int)
= 1000 + (3*4)
= 1000 +12
= 1012
  • Con trỏ có thể được sử dụng để truy cập các phần tử của mảng thay vì sử dụng lập chỉ mục mảng.

  • * (p + 3) cho giá trị của một [3].

a[i] = *(p+i)

Chương trình mẫu

Sau đây là chương trình C cho con trỏ và mảng một chiều -

#include<stdio.h>
main ( ){
   int a[5];
   int *p,i;
   printf ("Enter 5 lements");
   for (i=0; i<5; i++)
      scanf ("%d", &a[i]);
   p = &a[0];
   printf ("Elements of the array are");
   for (i=0; i<5; i++)
      printf("%d", *(p+i));
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter 5 elements : 10 20 30 40 50
Elements of the array are : 10 20 30 40 50