Con trỏ thực chất là một biến chứa ₫ịa chỉ của một ₫ối tượng có thể là một biến hoặc một hàm. int v = 2; int* p = &v; // p holds the address of v
2.3.2 Kiểu (const) Cho phép khai báo biến số, ₫ược gán giá trị cố ₫ịnh số ₫ược thay ₫ổi => khai báo số © 2004, HỒNG MINH SƠN void main() { const double pi = 3.1412; // initializing is OK! const int ci = 1; // initializing is OK! ci = 2; // error! ci = 1; // error, too! int i = ci; // const int is a subset of int const Color cc = Red; cc = Green; // error const double d; // potential error } Chương 2: Các yếu tố C C++ 29 2.3.3 Kiểu trỏ Con trỏ thực chất biến chứa ₫ịa ₫ối tượng biến hàm int v = 2; int* p = &v; // p holds the address of v Con trỏ p Vùng nhớ chứa biến CT 0x000127c3 © 2004, HỒNG MINH SƠN p: &v v: chứa ₫ịa biến v Chương 2: Các yếu tố C C++ 30 2.3.3 Kiểu trỏ © 2004, HỒNG MINH SƠN int i = 1; int* p = &i;// p holds the address of i *p = 2; // i = int j; p = &j; // now p holds the address of j *p = 3; // j = 3, i remains Chương 2: Các yếu tố C C++ 31 Ví dụ sử dụng kiểu trỏ © 2004, HỒNG MINH SƠN void main() { int i = 0; int* p = &i; int j = *p; *p = 2; p = &j; *p = 3; double d = i; p = &d; p = (*int)&d; // // // // // // // // // double* pd=0; // *pd = 0; // pd = &d; // double* pd2; // *pd2 = 0; // pd2 = &d; // p refers to the addesss of i j = now i = now p contains the addess of j now j = 3, i remains OK, int is compatible to double error, int* isn’t compatible to double* no compile error, but dangerous, meaningles type conversion! p contains the address no compile error, but fatal error OK p refers to an uncertain address fatal error OK, pd and pd2 refer to the same addr } Chương 2: Các yếu tố C C++ 32 Tóm tắt sơ trỏ Con trỏ biến chứa ₫ịa byte ₫ầu biến liệu, ₫ược sử dụng ₫ể truy cập gián tiếp liệu ₫ó Sau khai báo mà không khởi tạo, mặc ₫ịnh trỏ mang ₫ịa bất ₫ịnh Địa trỏ mang thay ₫ổi ₫ược => trỏ lúc ₫ại diện cho biến liệu khác Toán tử lấy ₫ịa biến (&) trả trỏ vào kiểu biến => thường gán cho biến trỏ © 2004, HỒNG MINH SƠN Toán tử truy nhập nội dung (*) áp dụng cho trỏ trả biến mà trỏ mang ₫ịa => ₫ọc thay ₫ổi giá trị biến ₫ó Khơng sử dụng toán tử truy nhập nội dung, trỏ chưa mang ₫ịa nhớ mà chương trình có quyền kiểm sốt Chương 2: Các yếu tố C C++ 33 2.3.4 Kiểu mảng Chỉ số N-1 ₫ịa ₫ầu ₫ịa cuối ₫ịa ₫ầu - ₫ịa cuối = N * kích cỡ phần tử © 2004, HỒNG MINH SƠN Cấu trúc liệu với: — — — — Số lượng phần tử cố ₫ịnh Các phần tử có kiểu Các phần tử ₫ược xếp nhớ Có thể truy nhập phần tử cách tự theo số theo ₫ịa Chương 2: Các yếu tố C C++ 34 Khai báo mảng Số phần tử mảng phải số nguyên (trong C phải trực kiện, C++ kiểu const ) Khai báo không khởi tạo: int enum double const int char a[3]; {index = 5}; b[index]; N = 2; c[N]; // C++ only © 2004, HOÀNG MINH SƠN Khai báo với số phần tử khởi tạo giá trị phần tử int double char d[3]= {1, 2, 3}; e[5]= {1, 2, 3}; f[4]= {0}; Chương 2: Các yếu tố C C++ 35 ... MINH SƠN C? ??u tr? ?c liệu với: — — — — Số lượng phần tử c? ?? ₫ịnh C? ?c phần tử c? ? kiểu C? ?c phần tử ₫ư? ?c xếp nhớ C? ? thể truy nhập phần tử c? ?ch tự theo số theo ₫ịa Chương 2: C? ?c yếu tố C C++ 34 Khai... nhập nội dung, trỏ chưa mang ₫ịa nhớ mà chương trình c? ? quyền kiểm soát Chương 2: C? ?c yếu tố C C++ 33 2.3.4 Kiểu mảng Chỉ số N-1 ₫ịa ₫ầu ₫ịa cuối ₫ịa ₫ầu - ₫ịa cuối = N * kích c? ?? phần tử © 2004,... 2004, HỒNG MINH SƠN Khai báo với số phần tử khởi tạo giá trị phần tử int double char d[3]= {1, 2, 3}; e [5] = {1, 2, 3}; f[4]= {0}; Chương 2: C? ?c yếu tố C C++ 35