Mảng các ký tự được gọi là chuỗi (string).
Khai báo
Cú pháp khai báo mảng:
char stringname[size];
Ví dụ: char string[50]; chuỗi độ dài 50 ký tự.
Khởi tạo
- Sử dụng hằng ký tự đơn lẻ:
char string[10] = {'H', 'e', 'l', 'l', 'o', '\0'};
- Sử dụng hằng chuỗi:
char string[10] = "Hello";
Truy cập - Có chuỗi điều khiển "%s" dùng để truy cập chuỗi cho đến khi gặp '\0'.
Bây giờ hãy hiểu mảng con trỏ (arrays of pointers) trong C.
Mảng con trỏ (trỏ tới chuỗi)
- Khai báo và khởi tạo như sau:
char *a[] = {"one", "two", "three"};
Ở đây, a[0] là con trỏ tới địa chỉ cơ sở của chuỗi "one".
a[1] là con trỏ tới địa chỉ cơ sở của chuỗi "two".
a[2] là con trỏ tới địa chỉ cơ sở của chuỗi "three".
Ví dụ 1
Chương trình C minh họa khái niệm chuỗi:
#include <stdio.h>
#include <string.h>
void main() {
// Khai báo chuỗi và con trỏ
char *s = "Meghana";
// In kết quả yêu cầu
printf("%s\n", s); // Meghana
printf("%c\n", s); // Nếu dùng %c, cần * cho chuỗi. Ngay cả không có đầu ra
printf("%c\n", *s); // M vì là ký tự ở địa chỉ cơ sở
printf("%c\n", *(s+4)); // Ký tự thứ 5 là a vì ở vị trí (địa chỉ cơ sở + 4)
printf("%c\n", *s+5); // R vì xét ký tự ở địa chỉ cơ sở + 5 theo thứ tự bảng chữ cái
}
Kết quả
Meghana M a R
Ví dụ 2
Ví dụ khác minh họa in ký tự sử dụng toán tử tiền tố và hậu tố:
#include <stdio.h>
#include <string.h>
void main() {
char *s = "Meghana";
printf("%s\n", s); // Meghana
printf("%c\n", ++s+3); // s thành vị trí 2 - 'e'. Đầu ra là giá trị rác
printf("%c\n", s+++3); // s thành vị trí 3 - 'g'. Đầu ra là giá trị rác
printf("%c\n", *++s+3); // s=3 tăng 1 = 'h'. s thành vị trí 4. h+3 = k là đầu ra
printf("%c\n", *s+++3); // s=4 - h là giá trị. h+3 = k là đầu ra. s tăng 1 thành vị trí 5
}
Kết quả
Meghana d d k k