VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

C++ Cơ Bản

Ngôn ngữ lập trình C++ là gì? Lịch sử của C++ Các tính năng của C++ Cài đặt môi trường lập trình C++ Chương trình C++ đầu tiên Biến trong C++ Các kiểu dữ liệu trong C++ Ép kiểu trong C++ Từ khóa trong C++ Các toán tử trong C++ Comment trong C++ Các hằng số trong C++ count, cin và endl trong C++ Ký tự đặc biệt trong C++ Namespace trong C++ Template trong C++ Modifier trong C/C++

Câu Lệnh Điều Khiển C++

Mệnh đề if-else Mệnh đề switch Vòng lặp for Vòng lặp while Vòng lặp do-while Lệnh Break Lệnh Continue Lệnh Goto

C++ Function

Hàm trong C++ Hàm do người dùng định nghĩa Các kiểu hàm trong C++ Đệ quy trong C++ Call by value Call by reference

C++ Array

Mảng (array) trong C++ Mảng 2 chiều trong C++ Truyền mảng vào hàm

C++ Poiter

Con trỏ trong C++ Con trỏ Null trong C++ Con trỏ số học trong C++ Con trỏ và mảng trong C++ Mảng con trỏ trong C++ Con trỏ tới con trỏ trong C++ Truyền con trỏ tới hàm trong C++ Trả về con trỏ từ hàm trong C++

C++ Lớp Object

Khái niệm lập trình hướng đối tượng trong C++ Lớp và đối tượng trong C++ Constructor trong C++ Destructor trong C++ this trong C++ static trong C++ struct trong C++ Enumeration trong C++ Hàm Friend trong C++ Hàm Math trong C++ Tính kế thừa trong C++ Tính đa hình trong C++ Tính trừu tượng trong C++ Tính đóng gói trong C++ Interface trong C++

Nạp Chồng Toán Tử

Nạp chồng toán tử và Nạp chồng hàm trong C++ Nạp chồng toán tử một ngôi trong C++ Nạp chồng toán tử nhị phân trong C++ Nạp chồng toán tử quan hệ trong C++ Nạp chồng toán tử Input/Output trong C++ Nạp chồng toán tử ++ và -- trong C++ Nạp chồng toán tử gán trong C++ Nạp chồng toán tử gọi hàm () trong C++ Nạp chồng toán tử subscript [] trong C++ Nạp chồng toán tử truy cập thành viên lớp (->) trong C++

Lập Trình C++

Xử lý ngoại lệ trong C++ Đa luồng trong C++
Bài Tập C++ Có Lời Giải
1 / 3
❮ ❯

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


Con trỏ NULL trong C++
Con trỏ và mảng trong C++

Như đã giải thích trong bài trước, con trỏ trong C++ là một địa chỉ ô nhớ. 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 về con trỏ số học trong C++, chúng ta giả sử rằng biến contro là một con trỏ nguyên mà trỏ tới địa chỉ 1000. 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, nghĩa là tăng lên 4 byte kế tiếp so với 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.


Nội dung chính

  • Tăng con trỏ trong C++
  • Giảm con trỏ trong C++
  • So sánh con trỏ trong C++

Tăng con trỏ trong 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  arr[MAX] = {10, 20, 30};
    int  *contro;

    // contro tro toi mang
    contro = arr; // arr dai dien cho gia tri dau tien cua mang arr
    for (int i = 0; i < MAX; i++) {
        cout << "Dia chi cua arr[" << i << "] = ";
        cout << contro << endl;

        cout << "Gia tri cua arr[" << i << "] = ";
        cout << *contro << endl;

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

Như bạn đã biết các phần tử của mảng trong C++ được lưu trong các vùng nhớ liên tiếp. Nên khi tăng con trỏ lên một đơn vị tức là con trỏ sẽ trỏ đến địa chỉ lưu phần tử tiếp theo của mảng.

Kết quả:

Dia chi cua arr[0] = 0x6ffe30
Gia tri cua arr[0] = 10
Dia chi cua arr[1] = 0x6ffe34
Gia tri cua arr[1] = 20
Dia chi cua arr[2] = 0x6ffe38
Gia tri cua arr[2] = 30


Giảm con trỏ trong C++

Ví dụ giảm con trỏ trong C++, giá trị của nó sẽ sẽ được giảm theo 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  arr[MAX] = {10, 20, 30};
    int  *contro;

    // contro tro toi dia chi cuoi cung cua mang arr
    contro = &arr[MAX - 1];
    for (int i = MAX-1; i >= 0; i--) {
        cout << "Dia chi cua arr[" << i << "] = ";
        cout << contro << endl;

        cout << "Gia tri cua arr[" << i << "] = ";
        cout << *contro << endl;

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

Kết quả:

Dia chi cua arr[2] = 0x6ffe38
Gia tri cua arr[2] = 30
Dia chi cua arr[1] = 0x6ffe34
Gia tri cua arr[1] = 20
Dia chi cua arr[0] = 0x6ffe30
Gia tri cua arr[0] = 10

So sánh con trỏ trong 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  arr[MAX] = {10, 100, 200};
    int  *contro;

    // tro contro toi vi tri dau tien cua mang arr
    contro = arr;
    int i = 0;
    while ( contro <= &arr[MAX - 1] ) {
        cout << "Dia chi cua arr[" << i << "] = ";
        cout << contro << endl;

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

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

Kết quả:

Dia chi cua arr[0] = 0x6ffe30
Dia chi cua arr[0] = 10
Dia chi cua arr[1] = 0x6ffe34
Dia chi cua arr[1] = 100
Dia chi cua arr[2] = 0x6ffe38
Dia chi cua arr[2] = 200

Con trỏ NULL trong C++
Con trỏ và mảng trong C++

Recent Updates

Sắp Tết 2024 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2024?Đa luồng trong C++Xử lý ngoại lệ trong C++Nạp chồng toán tử truy cập thành viên lớp (->) trong C++Nạp chồng toán tử subscript [] trong C++Nạp chồng toán tử gọi hàm () trong C++Nạp chồng toán tử gán trong C++Nạp chồng toán tử ++ và -- trong C++Nạp chồng toán tử Input/Output trong C++Nạp chồng toán tử quan hệ trong C++Nạp chồng toán tử nhị phân trong C++Nạp chồng toán tử một ngôi trong C++Nạp chồng toán tử và Nạp chồng hàm trong C++

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml