Con trỏ - Pointer

Con trỏ là miền giá trị của một biến con trỏ là địa chỉ ô nhớ

CÚ pháp KDL * ;

Ví dụ: int *n; Trong ví dụ trên ta nói n là một biến con trỏ kiểu số nguyên. Miền giá trị của biến n là địa chỉ ô nhớ. Ví dụ 2:

Struct phanso
{
   int tu;
   int mau;
};
typedef struct phanso PHANSO;
PHANSO *ps;

Trong ví dụ trên ta nói ps là một biến con trỏ kiểu cấu trúc PHANSO. Miền giá trị của biến ps là địa chỉ ô nhớ.

CÁch dùng

CÁch 1: Sử dụng con trỏ để giữ địa chỉ của một biến

cách 2: sử dụng con trò để xin cấp phát và thu hồi bộ nhớ.

Hai toán tử cơ bản

Toán tử &: được sử dụng để lấy địa chỉ của một biến.

TOán tử *: được sử dụng để lấy và cập nhật giá trị tại địa chỉ mà biến con trò đang giữ.

CẤp phát và thu hồi

Cấp phát: để cấp phát bộ nhớ cho một biến con trỏ ta có thể sử dụng các hàm: malloc, calloc, ralloc hoặc new.

Thu hồi: để thu hồi bộ nhớ đã cấp phát cho một biến con trỏ ta dùng hàm free hoặc delete.

Lưu ý khi sử dụng toán tử new thì khi thu hồi bắt buộc phải dùng delete.

COn trỏ cấu trúc

Để truy xuất đến một thành phần của biến con trỏ cấu trúc ta sử dụng toán tử mũi tên (->).

Địa chỉ ô nhớ

Để xuất một địa chỉ ô nhớ ra màn hình ta sử dụng mã định dạng %p.

Ví dụ 3: VIết chương trình khai báo một con trỏ số nguyên a. Cấp phát bộ nhớ có kích thước bằng kích thước của kiểu số nguyên và gán giá trị 9 tại vùng nhớ được cấp phát.

#include 
#inclide 
void main()
{
   int *a;
   a= new int;
   *a=9;
   delete a;
}

Ví dụ 4: Viết chương trình nhập và xuất mảng một chiều các số thực bằng cách sử dụng kỹ thuật con trỏ.

#include 
#inclide 
void main()
{
   float *a;
   int n;
   printf("Nhap n:");
   scanf("%d", &n);
   a= new float[n];
   int i=0;
   while( n < i)
   {
     printf("Nhap a[%d]:",i);
     scanf("%f", &a[i]);
     i++;
   }
   for(int j=0; j < n; j++)
     printf("%8.2f",a[j]);
   delete []a;
}

Ví dụ 5: Viết chương trình nhập và xuất mảng một chiều các phân số bằng cách sử dụng kỹ thuật con trỏ.

#include 
#include 
struct ps
{
  int tu;
  int mau;
};
typedef struct ps PHANSO;
void Nhap(PHANSO $x)
{
  printf("nhap tu so:");
  scanf("%d",&x.tu);
  printf("nhap mau so:");
  scanf("%d", &x.mau);
}
void Xuat(PHANSO x)
{
  printf("%d/%d", x.tu,x.mau);
}
void main()
{
  PHANSO *ps;
  int n;
  printf("Nhap n:");
  scanf("%d", &n);
  ps = new PHANSO[n];
  for(int i=0;i < n ;i++)
  {
     printf("Nhap ps[%d]:",i);
     Nhap(ps[i]);
  }
  for(int j=0; j < n ; j++)
    XUat(ps[j]);
  delete []ps;
}
Chủ đề liên quan
Con trỏ - Pointer

Cùng chuyên mục

Xem nhiều hôm nay