Con trỏ Ký tự và Hàm trong C

Xin chào các bạn nhà lập trình nhân ái! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới của con trỏ ký tự và hàm trong C. Đừng lo nếu bạn mới bắt đầu học lập trình – tôi sẽ là người hướng dẫn bạn, giải thích mọi thứ từng bước. Hãy bắt đầu nào!

C - Character Pointers and Functions

Con trỏ Ký tự là gì trong C?

Hãy tưởng tượng bạn có một dấu nháy ma thuật có thể chỉ đến bất kỳ chữ cái nào trong một cuốn sách. Đó chính là điều gì mà con trỏ ký tự trong C là – nó là một biến đặc biệt lưu trữ địa chỉ bộ nhớ của một ký tự.

Trong những ngày đầu tiên dạy học, tôi thường nói với các học viên của mình hãy tưởng tượng bộ nhớ như một khu phố lớn, và mỗi ngôi nhà (vị trí nhớ) có một địa chỉ duy nhất. Con trỏ ký tự như biết địa chỉ cụ thể của một ngôi nhà nào đó nơi mà ký tự ở.

Khai báo Con trỏ Ký tự

Khai báo con trỏ ký tự rất đơn giản. Đây là cách bạn làm:

char *ptr;

Dòng này nói với máy tính, "Ôi, tôi muốn tạo một con trỏ có tên 'ptr' sẽ chỉ đến một ký tự."

Khởi tạo Con trỏ Ký tự

Bây giờ khi chúng ta đã khai báo con trỏ, hãy để nó chỉ đến một điều gì đó:

char ch = 'A';
char *ptr = &ch;

Ở đây, chúng ta đang tạo một ký tự 'A' và sau đó nói với con trỏ của chúng ta để ghi nhớ nơi 'A' ở trong bộ nhớ.

Ví dụ về Con trỏ Ký tự

Hãy đặt những gì chúng ta đã học vào thực hành với một ví dụ đơn giản:

#include <stdio.h>

int main() {
char ch = 'B';
char *ptr = &ch;

printf("Ký tự là: %c\n", *ptr);
printf("Địa chỉ của ký tự là: %p\n", (void*)ptr);

return 0;
}

Khi bạn chạy mã này, bạn sẽ thấy:

Ký tự là: B
Địa chỉ của ký tự là: [một địa chỉ bộ nhớ cụ thể]

Hãy phân tích:

  1. Chúng ta tạo một ký tự 'B' và lưu nó trong 'ch'.
  2. Chúng ta tạo một con trỏ 'ptr' và làm nó chỉ đến 'ch'.
  3. Chúng ta sử dụng '*ptr' để lấy giá trị mà ptr đang chỉ đến (là 'B').
  4. Chúng ta in ra địa chỉ lưu trữ trong 'ptr', nơi mà 'B' ở trong bộ nhớ.

Hiểu về Con trỏ Ký tự

Bây giờ, hãy đi sâu hơn. Con trỏ ký tự có mối quan hệ đặc biệt với chuỗi trong C. Xem ví dụ này:

char *str = "Hello, World!";
printf("%s\n", str);

Mã này sẽ in ra "Hello, World!". Nhưng sao? Trong C, chuỗi chỉ là các mảng ký tự kết thúc bằng ký tự null ('\0'). Khi chúng ta sử dụng con trỏ ký tự với một chuỗi văn bản như này, nó chỉ đến ký tự đầu tiên của chuỗi.

Truy cập Mảng Ký tự

Hãy xem cách chúng ta có thể sử dụng con trỏ ký tự để truy cập các phần tử trong một mảng ký tự:

#include <stdio.h>

int main() {
char str[] = "Lập trình C";
char *ptr = str;

for(int i = 0; ptr[i] != '\0'; i++) {
printf("%c", ptr[i]);
}

return 0;
}

Mã này sẽ in ra "Lập trình C". Ở đây, chúng ta sử dụng con trỏ để truy cập mỗi ký tự trong mảng cho đến khi gặp ký tự null.

Hàm của Con trỏ Ký tự

Bây giờ, hãy khám phá một số hàm phổ biến làm việc với con trỏ ký tự. Tôi sẽ trình bày chúng trong bảng để dễ tham khảo:

Hàm Mô tả Ví dụ
strlen() Tính toán độ dài của chuỗi size_t len = strlen(str);
strcpy() Sao chép một chuỗi sang chuỗi khác strcpy(dest, src);
strcat() Nối hai chuỗi strcat(str1, str2);
strcmp() So sánh hai chuỗi int result = strcmp(str1, str2);

Hãy xem những hàm này hoạt động:

#include <stdio.h>
#include <string.h>

int main() {
char str1[20] = "Xin chào";
char str2[] = " Thế giới!";
char str3[20];

printf("Độ dài của str1: %lu\n", strlen(str1));

strcpy(str3, str1);
printf("str3 sau strcpy: %s\n", str3);

strcat(str1, str2);
printf("str1 sau strcat: %s\n", str1);

if(strcmp(str1, "Xin chào Thế giới!") == 0) {
printf("Các chuỗi bằng nhau\n");
}

return 0;
}

Mã này minh họa cách sử dụng các hàm chuỗi phổ biến này với con trỏ ký tự.

Và đã đến chỗ này! Chúng ta đã bắt đầu với các khái niệm cơ bản về con trỏ ký tự và hàm trong C. Hãy nhớ, thực hành sẽ làm bạn thành thạo, vì vậy đừng sợ thử nghiệm với các khái niệm này. Chúc các bạn mãi mãi hạnh phúc lập trình!

Credits: Image by storyset