BÀI TẬP VỀ CON TRỎ TRONG C

      17

Con trỏ trong c là gì?Con trỏ là biến được dùng để chứa địa chỉ vùng nhớ của một biến khác. Nếu một biến chứa địa chỉ của biến khác, thì biến đầu tiên được gọi là con trỏ.

Bạn đang xem: Bài tập về con trỏ trong c

Con trỏ hỗ trợ một phương pháp gián tiếp giúp truy cập dữ liệu của biến mà con trỏ đó đang trỏđến.

Con trỏ có thể trỏđến các biến của các kiểu dữ liệu như int, long, float, double, char hoặc dữ liệu kiểu cấu trúc.

Tại sao phải sử dụng con trỏ?

Có thể liệt kêmột số tình huống mà con trỏ có thểđược sử dụng như:xây dựng hàm trả về nhiều hơn một giá trị;thao tác trên mảngđược dễ dàng hơn bằng cách di chuyển con trỏ thay vì di chuyển vị trí của các phần tử.

Con trỏ trong c – Khai báo biến con trỏ

Kiểu_Dữ_Liệu *Tên_Con_Trỏ;Haitoán tử sử dụng với con trỏ trong c làToán tử & và toán tử *

Toán tử &được sử dụngđể trả vềđịa chỉ vùng nhớ của biến

Tên_Biến = &Tên_Con_Trỏ;Toán tử *được sử dụngđể trả về giá trị chứa trong vùng nhớ mà con trỏđang trỏđến.

Tên_Biến = *Tên_Con_Trỏ;Ví dụ khai báo con trỏ trong c

#include main() { int x; int *px; x = 7; px = &x; printf("%d", *px); }Kết quả hiển thị trên màn hình là 7.Độc giả quan sát hình bên dướiđể hiểu rõ hơn


*

Giả sử biến x cóđịa chỉ vùng nhớ là0240FF8C và nội dung chứa bên trong vùng nhớ là 7 (x = 7)

Khi chúng ta thực hiện xử lýpx = &x; có nghĩa là gán biến con trỏ px cho vùng nhớ0240FF8C.

Muốn truy cập nội dung bên trong vùng nhớ này, chúng ta sử dụng*px và hiển thị kết quả bằng lệnh printf:printf(“%d”, *px);

Con trỏ trong c –Con trỏ với mảng

Như bạnđọcđã biết, chúng ta truy cập phần tử của mảng thông qua chỉ số theo cú pháp Tên_Mảng và tham khảođịa chỉ của mảng theo cú pháp &Tên_Mảng

Đối với con trỏ cú phápTên_Mảng sẽ là *(Tên_Mảng + Chỉ_Số), cú pháp&Tên_Mảng sẽ là Tên_Mảng + Chỉ_Số

Ví dụ khai báo mảng

int a<> ={3, 2, 9, 100, 7};Truy cập phần tử thứ 3 củamảng

MảngCon trỏ
int x = a<2>;int x = *(a+2);

Tham khảođịa chỉ mảng

MảngCon trỏ
scanf(“%d”, &a<2>);scanf(“%d”, a+2);

Như vậy khi làm việc với mảng, chúng ta có thể sử dụng một trong hai cách nhưđã trình bàyở trên.

Con trỏ trong c –Con trỏ với chuỗi

Quan sát đoạn chương trình sau

#include main(){ char *welcome = "Chao ban "; char yourname<50>; printf("Vui long nhap ten ban: "); //Thông báo scanf("%s", &yourname); //Nhập tên printf("%s%s", welcome, yourname); //Hiển thị }Kết quả

Vui long nhap ten ban: DangChao ban DangGiải thích chương trình

welcome là biến con trỏđược khai báo và khởi tạo bằng câu lệnh char *welcome = “Chao ban” thay vì sử dụng chuỗi charwelcome<10> = “Chao ban”.

Xem thêm: +6 Cách Check Địa Chỉ Ip Của Một Website, Thông Tin Tên Miền Đơn Giản Nhất

Cả hai cáchđều cho cùng kết quả,điểm khác biệtởđây khi khai báo chuỗi sử dụng mảng chúng ta phải chỉđịnh số ký tự cònđối với con trỏ thì không.

Quan sát câu lệnh char yourname<50>; và câu lệnh char *yourname;

Con trỏ trong c –Con trỏ với hàm

Tạo hàm hoán vị 2 số nguyên: Trường hợpkhông sử dụng con trỏ

void hoanvi1(int a, int b){ int t; t = a; a = b; b = t; }Gọi hàm

int a = 1, b = 2; hoanvi1(a, b); printf("a = %d, b = %d", a, b);Kết quả hiển thị là 1, 2. Điều đó có nghĩa là giá trị của a và b vẫn giữ nguyên mặc dù bên trong hàm hoanvi1 đã thực hiện thay đổi giá trị.

Trường hợp sử dụng con trỏ

void hoanvi2(int *a, int *b){ int t; t = *a; *a = *b; *b = t; }Gọi hàm

int a = 1, b = 2; hoanvi2(&a, &b); printf("a = %d, b = %d", a, b);Kết quả hiển thị: 2, 1. Nghĩa là giá trị của a và bđãđược thayđổi ngay trong bên thân hàm. Điều này có thể đượcgiải thích như sau

Đối với hàm hoanvi1 mặc dù chúng ta thực hiện hoánđổi giá trị cho 2 tham số a,b và đương nhiên giá trị của 2 tham số này sẽ thayđổi, tuy nhiên CHỈ THAYĐỔI BÊN TRONG HÀM, khi kết thúc hàm giá trị của 2 tham số này vẫn giữ nguyên. Vì thực chất bên trong hàm chỉ sử dụng bản sao của biến nên mọi thayđổi bên trong hàm sẽ khôngđược ghi nhận.

Đối với hàm hoanvi2 vì chúng tađang sử dụng con trỏ nên việc thayđổi giá trịđược thực hiện trên bản gốc của biến. Vì vậy giá trị của biến khi bị thay đổi bên trong hàmsẽđược ghi nhận sau khi kết thúc hàm.

Con trỏ trong c –Tổng kết

Con trỏ và khai báo con trỏCon trỏ với mảngCon trỏ với chuỗiCon trỏ với hàm

Con trỏ trong c –Bài tập thực hành

Bài thực hành số 1: Viết chương trình kiểm tra một chuỗi có phải làpalindrome. Một chuỗi được gọi làpalindrome nếu sau khiđảo ngược các ký tự của nó ta vẫn nhậnđược chuỗi như banđầu. Ví dụ chuỗi MADAM.

Bài thực hành số 2: Viết chương trình nhập vào mộttên và đếmsố ký tự là nguyênâm và phụâm.

Bài thực hành số 3: Viết chương trình tìm phần tử có giá trị nhỏ nhất và lớn nhất trong mảng một chiều.