Con trỏ số học trong C/C++



Như đã giải thích trong chương chính, con trỏ trong C/C++ là một địa chỉ, mà là một giá trị số. Vì thế, bạn có thể thực hiện các hoạt động số học trên một con trỏ như khi bạn thực hiện với giá trị số. Có 4 toán tử số học mà có thể được sử dụng trên các con trỏ: ++, --, +, và -.

Để hiểu con trỏ số học, chúng ta giả sử rằng contro là một con trỏ nguyên mà trỏ tới 1000 địa chỉ. Giả sử số nguyên là 32 bit, chúng ta thực hiện thao tác số học trên con trỏ này:

contro++

Bây giờ, sau thao tác trên, contro sẽ trỏ tới vị trí 1004 bởi vì mỗi lần contro được tăng thêm một, nó sẽ trỏ tới vị trí integer kế tiếp mà là 4 byte kế tiếp vị trí hiện tại. Thao tác này sẽ di chuyển con trỏ tới vị trí bộ nhớ tiếp theo mà không ảnh hưởng tới giá trị thực sự tại vị trí bộ nhớ. Nếu contro trỏ tới một ký tự mà địa chỉ của nó là 1000, thì khi đó thao tác trên sẽ trỏ tới vị trí 1001 bởi vì ký tự tới sẽ ở vị trí 1001.

Tăng một Con trỏ trong C/C++

Chúng ta ưa thích sử dụng một con trỏ trong chương trình thay vì sử dụng một mảng bởi vì con trỏ biến có thể tăng, không giống như tên mảng, không thể tăng được, bởi vì nó là một con trỏ hằng số. Chương trình sau tăng con trỏ biến để truy cập tới mỗi phần tử của mảng:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  mang[MAX] = {10, 100, 200};
   int  *contro;

   // bay gio chung ta co mot mang dia chi trong con tro.
   contro = mang;
   for (int i = 0; i < MAX; i++)
   {
      cout << "Dia chi cua mang[" << i << "] = ";
      cout << contro << endl;

      cout << "Dia chi cua mang[" << i << "] = ";
      cout << *contro << endl;

      // tro toi vi tri tiep theo
      contro++;
   }
   return 0;
}

Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:

Tăng Con trỏ trong C/C++

Giảm một Con trỏ trong C/C++

Chương trình sau để giảm một con trỏ, mà sẽ giảm giá trị của nó bởi số các byte của kiểu dữ liệu như sau:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  mang[MAX] = {10, 100, 200};
   int  *contro;

   // bay gio chung ta co dia chi cua phan tu cuoi trong con tro.
   contro = &mang[MAX-1];
   for (int i = MAX; i > 0; i--)
   {
      cout << "Dia chi cua mang[" << i << "] = ";
      cout << contro << endl;

      cout << "Dia chi cua mang[" << i << "] = ";
      cout << *contro << endl;

      // tro toi vi tri o truoc
      contro--;
   }
   return 0;
}

Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:

Giảm Con trỏ trong C/C++

So sánh Con trỏ trong C/C++

Các con trỏ có thể được so sánh bởi sử dụng các toán tử quan hệ, như ==, <, và >. Nếu p1 và p2 trỏ tới các biến mà có liên quan với nhau, như các phần tử của cùng một mảng, thì khi đó, p1 và p2 có thể được so sánh với nhau một cách có ý nghĩa.

Chương trình sau chỉnh sửa ví dụ trước bởi tăng con trỏ biến để mà địa chỉ mà nó trỏ tới nhỏ hơn hoặc bằng địa chỉ của phần tử cuối cùng của mảng, là &var[MAX - 1]:

#include <iostream>

using namespace std;
const int MAX = 3;

int main ()
{
   int  mang[MAX] = {10, 100, 200};
   int  *contro;

   // bay gio chung ta co dia chi cua phan tu dau tien trong con tro.
   contro = mang;
   int i = 0;
   while ( contro <= &mang[MAX - 1] )
   {
      cout << "Dia chi cua mang[" << i << "] = ";
      cout << contro << endl;

      cout << "Dia chi cua mang[" << i << "] = ";
      cout << *contro << endl;

      // tro toi vi tri o truoc
      contro++;
      i++;
   }
   return 0;
}

Chạy chương trình C/C++ trên sẽ cho kết quả như hình sau:

So sánh Con trỏ trong C/C++

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.


con_tro_trong_cplusplus.jsp


Tài liệu giáo viên