Xâu kí tự
Hãy nhập một xâu kí tự. In ra màn hình đảo ngược của xâu đó.
Nhập xâu. Thống kê số các chữ số '0', số chữ số '1', …, số chữ số '9' trong xâu.
In ra vị trí kí tự trắng đầu tiên từ bên trái (phải) một xâu kí tự.
Nhập xâu. In ra tất các các vị trí của chữ 'a' trong xâu và tổng số lần xuât hiện của nó.
Nhập xâu. Tính số từ có trong xâu. In mỗi dòng một từ.
Nhập xâu họ tên, in ra họ, tên dưới dạng viết hoa.
Thay kí tự x trong xâu s bởi kí tự y (s, x, y được đọc vào từ bàn phím)
Xoá mọi kí tự x có trong xâu s (s, x được đọc vào từ bàn phím). (Gợi ý: nên xoá ngược từ cuối xâu về đầu xâu).
Nhập xâu. Không phân biệt viết hoa hay viết thường, hãy in ra các kí tự có mặt trong xâu và số lần xuất hiện của nó (ví dụ xâu “Trach - Van - Doanh” có chữ a xuất hiện 3 lần, c(1), d(1), h(2), n(2), o(1), r(1), t(1), -(2), space(4)).
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ình
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ột loạ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 con trỏ 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ều nà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ấp như 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ỏi tính cẩn thận cao và giàu kinh nghiệm của người lập trình.
Đị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à địa chỉ 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ến là 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ên biế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óm lạ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ột biế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 ;
cout << &x ; // địa chỉ sẽ được hiện dưới dạng cơ số 16. Ví dụ 0xfff4
Đố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ần dù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 địa chỉ 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ũng chí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ớ:
int x; // khai báo biến nguyên x
long y; // khai báo biến nguyên dài y
cout << &x << &y; // in địa chỉ các biến x, y
char s[9]; // khai báo mảng kí tự s
cout << a; // in địa chỉ mảng s
cout << &a[0]; // in địa chỉ mảng s (tức địa chỉ s[0])
cout << &a[2]; // in địa chỉ kí tự s[2]
Hình vẽ sau đây minh hoạ một vài biến và địa chỉ của nó trong bộ nhớ.
200
|
201
|
|
500
|
501
|
502
|
503
|
|
650
|
651
|
…
|
|
|
|
|
…
|
658
|
1
|
2
|
|
4
|
3
|
2
|
1
|
|
H
|
E
|
L
|
L
|
O
|
\0
|
|
|
|
x
|
|
y
|
|
s
|
Biến x chiếm 2 byte nhớ, có địa chỉ là 200, biến y có địa chỉ là 500 và chiếm 4 byte nhớ. Xâu s chiếm 9 byte nhớ tại địa chỉ 650. Các byte nhớ của một biến là liền nhau.
|
Các phép toán liên quan đến địa chỉ được gọi là số học địa chỉ. Tuy nhiên, chúng ta vẫn không được phép thao tác trực tiếp trên các địa chỉ như đặt biến vào địa chỉ này hay khác (công việc này do chương trình dịch đảm nhiệm), hay việc cộng, trừ hai địa chỉ với nhau là vô nghĩa … Các thao tác được phép trên địa chỉ vẫn phải thông qua các biến trung gian chứa địa chỉ, được gọi là biến con trỏ.
Chia sẻ với bạn bè của bạn: |