Danh mục

Giáo trình C++_hàm và chương trình

Số trang: 62      Loại file: pdf      Dung lượng: 729.91 KB      Lượt xem: 17      Lượt tải: 0    
10.10.2023

Xem trước 7 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tham khảo tài liệu giáo trình c++_hàm và chương trình, công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
Giáo trình C++_hàm và chương trìnhChương 4. Hàm và chương trình CHƯƠNG 4 HÀM VÀ CHƯƠNG TRÌNH Con trỏ và số học địa chỉ Hàm Đệ qui Tổ chức chương trìnhI. CON TRỎ VÀ SỐ HỌC ĐỊA CHỈ Trước khi bàn về hàm và chương trình, trong phần này chúng ta sẽ nói về mộtloại biến mới gọi là con trỏ, ý nghĩa, công dụng và sử dụng nó như thế nào. Biến contrỏ là một đặc trưng mạnh của C++, nó cho phép chúng ta thâm nhập trực tiếp vào bộnhớ để xử lý các bài toán khó bằng chỉ vài câu lệnh đơn giản của chương trình. Điềunày cũng góp phần làm cho C++ trở thành ngôn ngữ gần gũi với các ngôn ngữ cấp thấpnhư hợp ngữ. Tuy nhiên, vì tính đơn giản, ngắn gọn nên việc sử dụng con trỏ đòi hỏitính cẩn thận cao và giàu kinh nghiệm của người lập trình. 1. Địa chỉ, phép toán & Mọi chương trình trước khi chạy đều phải bố trí các biến do NSD khai báo vàođâu đó trong bộ nhớ. Để tạo điều kiện truy nhập dễ dàng trở lại các biến này, bộ nhớđược đánh số, mỗi byte sẽ được ứng với một số nguyên, được gọi là địa chỉ của byte đótừ 0 đến hết bộ nhớ. Từ đó, mỗi biến (với tên biến) được gắn với một số nguyên là địachỉ của byte đầu tiên mà biến đó được phân phối. Số lượng các byte phân phối cho biếnlà khác nhau (nhưng đặt liền nhau từ thấp đến cao) tuỳ thuộc kiểu dữ liệu của biến (vàtuỳ thuộc vào quan niệm của từng NNLT), tuy nhiên chỉ cần biết tên biến hoặc địa chỉcủa biến ta có thể đọc/viết dữ liệu vào/ra các biến đó. Từ đó ngoài việc thông qua tênbiến chúng ta còn có thể thông qua địa chỉ của chúng để truy nhập vào nội dung. Tómlại biến, ô nhớ và địa chỉ có quan hệ khăng khít với nhau. C++ cung cấp một toán tửmột ngôi & để lấy địa chỉ của các biến (ngoại trừ biến mảng và xâu kí tự). Nếu x là mộtbiến thì &x là địa chỉ của x. Từ đó câu lệnh sau cho ta biết x đ ược bố trí ở đâu trong bộnhớ: int x ; // địa chỉ sẽ được hiện dưới dạng cơ số 16. Ví dụ 0xfff4 cout Chương 4. Hàm và chương trình Đối với biến kiểu mảng, thì tên mảng chính là địa chỉ của mảng, do đó không cầndùng đến toán tử &. Ví dụ địa chỉ của mảng a chính là a (không phải &a). Mặt khác địachỉ của mảng a cũng chính là địa chỉ của byte đầu tiên mà mảng a chiếm và nó cũngchính là địa chỉ của phần tử đầu tiên của mảng a. Do vậy địa chỉ của mảng a là địa chỉcủa phần tử a[0] tức &a[0]. Tóm lại, địa chỉ của mảng a là a hoặc &a[0]. Tóm lại, cần nhớ: // khai báo biến nguyên x int x; // khai báo biến nguyên dài y long y; // in địa chỉ các biến x, y cout Chương 4. Hàm và chương trình  Để làm việc với địa chỉ của các biến cần phải thông qua các biến con trỏ trỏ đến biến đó. b. Khai báo biến con trỏ ; Địa chỉ của một biến là địa chỉ byte nhớ đầu tiên của biến đó. Vì vậy để lấy đượcnội dung của biến, con trỏ phải biết được số byte của biến, tức kiểu của biến mà con trỏsẽ trỏ tới. Kiểu này cũng được gọi là kiểu của con trỏ. Như vậy khai báo biến con trỏcũng giống như khai báo một biến thường ngoại trừ cần thêm dấu * trước tên biến(hoặc sau tên kiểu). Ví dụ: // khai báo biến p là biến con trỏ trỏ đến kiểu dữ liệu nguyên. int *p ; // hai con trỏ thực q và r. float *q, *r ; c. Sử dụng con trỏ, phép toán *  Để con trỏ p trỏ đến biến x ta phải dùng phép gán p = địa chỉ của x.  Nếu x không phải là mảng ta viết: p = &x.  Nếu x là mảng ta viết: p = x hoặc p = &x[0].  Không gán p cho một hằng địa chỉ cụ thể. Ví dụ viết p = 200 là sai.  Phép toán * cho phép lấy nội dung nơi p trỏ đến, ví dụ để gán nội dung nơi p trỏ đến cho biến f ta viết f = *p.  & và * là 2 phép toán ngược nhau. Cụ thể nếu p = &x thì x = *p. Từ đó nếu p trỏ đến x thì bất kỳ nơi nào xuất hiện x đều có thể thay được bởi *p và ngược lại.Ví dụ 1 : // khai báo 2 biến nguyên i, j int i, j ; // khai báo 2 con trỏ nguyên p, q int *p, *q ; // cho p trỏ tới i p = &i; // cho q trỏ tới j q = &j; // hỏi địa chỉ biến i cout Chương 4. Hàm và chương trình // tăng j (thông qua q) và hỏi j, j = 6 (*q)++ ; cout Chương 4. Hàm và chương trìnhVí dụ 3 : int a[100] = { 1, 2, 3, 4, 5, 6, 7 }, *p, *q; // cho p trỏ đến mảng a, *p = a[0] = 1 p = a; cout Chương 4. Hàm và chương trình d. Hiệu của 2 con trỏ ...

Tài liệu được xem nhiều: