Mảng, con trỏ và xâu ký tự:

Một phần của tài liệu Bài Giảng C++ (Trang 84 - 86)

Như ta đã biết trước đây, xâu ký tự là một dãy ký tự đặt trong hai dấu nháy kép, ví dụ như xâu ký tự: "Viet nam".

Khi gặp một xâu ký tự, máy sẽ cấp phát một khoảng nhớ cho một mảng kiểu char đủ lớn để chứa các ký tự của xâu và chứa thêm ký tự '\0' dùng làm ký tự kết thúc của một xâu ký tự. Mỗi ký tự của xâu được chứa trong một phần tử của mảng.

Cũng giống như tên mảng, xâu ký tự là một hằng địa chỉ biểu thị địa chỉ phần tử đầu tiên của mảng chứa nó. Vì vậy nếu ta khai báo biến xau như một con trỏ kiểu char:

char *xau=”Viet Nam”;

thì phép gán: xau="Ha noi" ; là hoàn toàn có nghĩa. Sau khi thực hiện câu lệnh này trong con trỏ xau sẽ có địa chỉ đầu của mảng (kiểu char) đang chứa xâu ký tự bên phải. Khi đó các câu lệnh: puts("Ha noi");

puts(xau);

sẽ có cùng một tác dụng là cho hiện lên màn hình dòng chữ Ha noi.

Mảng kiểu char thường dùng để chứa một dãy ký tự. Ví dụ, để nạp từ bàn phím tên của một người ta dùng một mảng kiểu char với độ dài 25, ta sử dụng các câu lệnh sau:

char ten[25];

printf("\n Ho ten:"); gets(ten);

Bây giờ chúng ta sẽ xem xét giữa mảng kiểu char và con trỏ kiểu char có những gì giống và khác nhau. Để thấy được sự khác nhau của chúng, ta đưa ra sự so sánh sau:

char *xau, ten[15]; ten="Ha noi" ; (1) gets(xau); (2)

xau= "Ha noi" ; gets(ten) ;

Các câu lệnh (1) và (2) là không hợp lệ. Câu lệnh (1) sai vì ten là một hằng địa chỉ và ta không thể gán một hằng địa chỉ này cho một hằng địa

chỉ khác. Câu lệnh (2) không thực hiện được bởi mục đích của câu lệnh là đọc từ bàn phím một dãy ký tự và lưu vào một vùng nhớ mà con trỏ

xau trỏ tới vì địa chỉ vùng nhớ của con trỏ xau còn chưa xác định. Nếu

trỏ xau đã trỏ tới một vùng nhớ nào đó thì câu lệnh (2) hoàn toàn thực hiện được. Chẳng hạn như sau khi thực hiện câu lệnh:

xau=ten; thì cách viết: gets(ten) ; và gets(xau); đều cho phép nhập xâu kí tự vào con trỏ xau.

Một phần của tài liệu Bài Giảng C++ (Trang 84 - 86)