Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C minh họa khái niệm chuỗi (string) sử dụng con trỏ


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)

    Là mảng các phần tử là con trỏ trỏ tới địa chỉ cơ sở của 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