Kỹ thuật lập trình C/C++-Chương: Con trỏ, mảng và quản lý bộ nhớ
Số trang: 17
Loại file: pdf
Dung lượng: 289.06 KB
Lượt xem: 10
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Biến còn trỏ là biến có chứa địa chỉ của một vùng trong bộ nhớ và kiểu xác định. Kích thước của con trỏ ương đương của int, tuy nhiên kích thước của vùng nhớ được trỏ tới là không xác định( con trỏ không chứa thông tin về kích thước). Khai báo bằng cách thêm dấu * ở trước tên biến
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình C/C++-Chương: Con trỏ, mảng và quản lý bộ nhớ Con trỏ, mảng và quản lý bộ nhớ EE3490: Kỹ thuật lập trình – HK1 2011/20121 Đào Trung Kiên – ĐH Bách khoa Hà NộiCon trỏ Biến con trỏ là biến có chứa địa chỉ của một vùng trong bộ nhớ và có kiểu xác định Kích thước của con trỏ tương đương của int, tuy nhiên kích thước của vùng nhớ được trỏ tới là không xác định (con trỏ không chứa thông tin về kích thước) Khai báo bằng cách thêm dấu * ở trước tên biến: int *pInt; int* int char *pChar; 10 struct SinhVien *pSV; Truy xuất giá trị thông qua con trỏ dùng toán tử *: int aInt = *pInt; (*pInt được hiểu là biến int mà pInt trỏ tới) *pChar = A; printf(Gia tri: %d, *pInt); EE3490: Kỹ thuật lập trình – HK1 2011/2012 2 Đào Trung Kiên – ĐH Bách khoa Hà NộiThay đổi địa chỉ trỏ tới Vì giá trị của con trỏ là địa chỉ, nên khi thay đổi giá trị đó, biến con trỏ sẽ trỏ tới một vùng nhớ khác Gán địa chỉ mới cho con trỏ bằng phép gán như thông thường int *pInt2; pInt2 = pInt; Toán tử địa chỉ &: tạo ra một con trỏ bằng việc lấy địa chỉ của một biến pA a int a; 10 int* pA = &a; /* pA trỏ tới a */ & là toán tử ngược với *, với một biến a bất kỳ thì *&a tương đương với a, và nếu a là một con trỏ thì &*a cũng tương đương với a EE3490: Kỹ thuật lập trình – HK1 2011/2012 3 Đào Trung Kiên – ĐH Bách khoa Hà Nội Minh hoạ char c = A; Địa chỉ các biến trong bộ nhớ theo int *pInt; thứ tự tăng dần ở đây chỉ có tính short s = 50; chất minh hoạ. Trong thực tế, int a = 10; stack được cấp phát từ cao xuống thấp biến khai báo sau sẽ có pInt = &a; địa chỉ nhỏ hơn. *pInt = 100;Địa chỉ 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511Biến … char c int* pInt short s int aGiá trị … A 1507 50 100 pInt: 1507 *pInt: 100 &a: 1507 a: 100 EE3490: Kỹ thuật lập trình – HK1 2011/2012 4 Đào Trung Kiên – ĐH Bách khoa Hà NộiCon trỏ void* Là con trỏ nhưng không mang thông tin về kiểu Có thể được chuyển kiểu ngầm định sang bất kỳ kiểu con trỏ nào khác, và ngược lại (nhưng trong C++ thì không) void* pVoid; int *pInt; char *pChar; pInt = pVoid; /* OK */ pChar = pVoid; /* OK */ pVoid = pInt; /* OK */ pVoid = pChar; /* OK */ pChar = pInt; /* lỗi */ pChar = (char*)pInt; /* OK */ Không dùng toán tử * được với con trỏ void* *pVoid /* lỗi */ Con trỏ void* được dùng để làm việc với bộ nhớ thuần tuý hoặc để thao tác với những biến chưa xác định kiểu memcpy(void* dest, const void* src, int size); EE3490: Kỹ thuật lập trình – HK1 2011/2012 5 Đào Trung Kiên – ĐH Bách khoa Hà NộiCon trỏ NULL Là một hằng con trỏ chứa địa chỉ 0, kiểu (void*), mang ý nghĩa đặc biệt là không trỏ tới địa chỉ nào trong bộ nhớ Bản chất là một macro được khai báo: #define NULL ((void*)0) Không được gán giá trị cho con trỏ NULL int *pInt = NULL *pInt = 100; /* lỗi */ Cần phân biệt con trỏ NULL và con trỏ chưa được khởi tạo (trỏ đến địa chỉ ngẫu nhiên) Con trỏ NULL thường được dùng để xác định tính hợp lệ của một biến con trỏ để tránh lỗi, l ...
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình C/C++-Chương: Con trỏ, mảng và quản lý bộ nhớ Con trỏ, mảng và quản lý bộ nhớ EE3490: Kỹ thuật lập trình – HK1 2011/20121 Đào Trung Kiên – ĐH Bách khoa Hà NộiCon trỏ Biến con trỏ là biến có chứa địa chỉ của một vùng trong bộ nhớ và có kiểu xác định Kích thước của con trỏ tương đương của int, tuy nhiên kích thước của vùng nhớ được trỏ tới là không xác định (con trỏ không chứa thông tin về kích thước) Khai báo bằng cách thêm dấu * ở trước tên biến: int *pInt; int* int char *pChar; 10 struct SinhVien *pSV; Truy xuất giá trị thông qua con trỏ dùng toán tử *: int aInt = *pInt; (*pInt được hiểu là biến int mà pInt trỏ tới) *pChar = A; printf(Gia tri: %d, *pInt); EE3490: Kỹ thuật lập trình – HK1 2011/2012 2 Đào Trung Kiên – ĐH Bách khoa Hà NộiThay đổi địa chỉ trỏ tới Vì giá trị của con trỏ là địa chỉ, nên khi thay đổi giá trị đó, biến con trỏ sẽ trỏ tới một vùng nhớ khác Gán địa chỉ mới cho con trỏ bằng phép gán như thông thường int *pInt2; pInt2 = pInt; Toán tử địa chỉ &: tạo ra một con trỏ bằng việc lấy địa chỉ của một biến pA a int a; 10 int* pA = &a; /* pA trỏ tới a */ & là toán tử ngược với *, với một biến a bất kỳ thì *&a tương đương với a, và nếu a là một con trỏ thì &*a cũng tương đương với a EE3490: Kỹ thuật lập trình – HK1 2011/2012 3 Đào Trung Kiên – ĐH Bách khoa Hà Nội Minh hoạ char c = A; Địa chỉ các biến trong bộ nhớ theo int *pInt; thứ tự tăng dần ở đây chỉ có tính short s = 50; chất minh hoạ. Trong thực tế, int a = 10; stack được cấp phát từ cao xuống thấp biến khai báo sau sẽ có pInt = &a; địa chỉ nhỏ hơn. *pInt = 100;Địa chỉ 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511Biến … char c int* pInt short s int aGiá trị … A 1507 50 100 pInt: 1507 *pInt: 100 &a: 1507 a: 100 EE3490: Kỹ thuật lập trình – HK1 2011/2012 4 Đào Trung Kiên – ĐH Bách khoa Hà NộiCon trỏ void* Là con trỏ nhưng không mang thông tin về kiểu Có thể được chuyển kiểu ngầm định sang bất kỳ kiểu con trỏ nào khác, và ngược lại (nhưng trong C++ thì không) void* pVoid; int *pInt; char *pChar; pInt = pVoid; /* OK */ pChar = pVoid; /* OK */ pVoid = pInt; /* OK */ pVoid = pChar; /* OK */ pChar = pInt; /* lỗi */ pChar = (char*)pInt; /* OK */ Không dùng toán tử * được với con trỏ void* *pVoid /* lỗi */ Con trỏ void* được dùng để làm việc với bộ nhớ thuần tuý hoặc để thao tác với những biến chưa xác định kiểu memcpy(void* dest, const void* src, int size); EE3490: Kỹ thuật lập trình – HK1 2011/2012 5 Đào Trung Kiên – ĐH Bách khoa Hà NộiCon trỏ NULL Là một hằng con trỏ chứa địa chỉ 0, kiểu (void*), mang ý nghĩa đặc biệt là không trỏ tới địa chỉ nào trong bộ nhớ Bản chất là một macro được khai báo: #define NULL ((void*)0) Không được gán giá trị cho con trỏ NULL int *pInt = NULL *pInt = 100; /* lỗi */ Cần phân biệt con trỏ NULL và con trỏ chưa được khởi tạo (trỏ đến địa chỉ ngẫu nhiên) Con trỏ NULL thường được dùng để xác định tính hợp lệ của một biến con trỏ để tránh lỗi, l ...
Tìm kiếm theo từ khóa liên quan:
kỹ thuật máy tính kỹ thuật lập trình giáo trình kỹ thuật lập trình C bài tập kỹ thuật lập trình C tài liệu kỹ thuật lập trình C chuyên ngành kỹ thuật lập trìnhGợi ý tài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 259 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 202 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 191 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 160 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 151 0 0 -
142 trang 129 0 0
-
Giáo trình Kỹ thuật lập trình C: Căn bản & nâng cao - Phần 1
202 trang 126 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 117 0 0 -
Giáo trình môn xử lý tín hiệu số - Chương 5
12 trang 116 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0