Con trỏ chuỗi trong c

Cùng khám phá về con trỏ chuỗi trong c. Bạn sẽ biết cách dùng con trỏ để giải quyết chuỗi trong C sau bài học này.

Con trỏ chuỗi trong c là gì

Trong bài Con trỏ trong C là gì tất cả chúng ta đã biết, con trỏ trong C là một biến được dùng để lưu trữ địa chỉ của dữ liệu trong bộ nhớ lưu trữ laptop.

Trong bài Con trỏ mảng trong c tất cả chúng ta cũng đã biết phương pháp sử dụng con trỏ để thao tác với mảng rồi.

Chuỗi ký tự trong C thực ra cũng là một loại mảng, & do vậy, tất cả chúng ta cũng có thể sử dụng con trỏ để lưu trữ địa chỉ của chuỗi & qua đó thao tác với chúng. Tất cả chúng ta gọi con trỏ sử dụng trong chuỗi là con trỏ chuỗi trong c.

Con trỏ chuỗi trong c

Bằng cách dùng con trỏ chuỗi trong C, tất cả chúng ta có thể khai báo & giải quyết chuỗi trực tiếp, cũng như giải quyết gián tiếp chuỗi trong hàm, qua đó chuyên sâu việc sử dụng hiệu quả bộ nhớ lưu trữ & giảm thời gian thực thi chương trình.

Cho nên, con trỏ chuỗi trong C là phần học thức chẳng thể thiếu mà một lập trình viên về C cần phải nắm rõ.

Khai báo con trỏ chuỗi trong c

Cách khai báo con trỏ chuỗi trong c cũng giống với cách khai báo các loại con trỏ khác. Tất cả chúng ta viết kiểu của con trỏ, kế tiếp là dấu hoa thị * & tên của con trỏ với cú pháp sau đây:

char *ᴘ;

Trong số đó char là kiểu dữ liệu của con trỏ chuỗi, & là tên con trỏ.

Sau thời điểm khai báo con trỏ chuỗi, tất cả chúng ta có thể gán địa chỉ của một chuỗi cho nó. Cũng giống như với con trỏ mảng thì khi gán địa chỉ chuỗi cho con trỏ trong C, tất cả chúng ta không dùng toán tử & khi gán địa chỉ của chuỗi cho con trỏ.

Chẳng hạn:

char

α[] =

"Hello"

, *p1;


p1 = α;



char

ɓ[

100

], *p2;


p2 = ɓ;


Con trỏ & địa chỉ trong chuỗi

Con trỏ chuỗi biểu thị địa chỉ của điểm khởi đầu chuỗi trong bộ nhớ lưu trữ

Con trỏ chuỗi biểu thị địa chỉ của điểm khởi đầu vùng lưu trữ chuỗi trong bộ nhớ lưu trữ. Địa chỉ này cũng chính là địa chỉ của ký tự trước hết (có index bằng 0) của chuỗi trong bộ nhớ lưu trữ.

Sau thời điểm gán địa chỉ của chuỗi cho con trỏ, tất cả chúng ta có thể xuất ra địa chỉ của điểm khởi đầu chuỗi (cũng chính là địa chỉ của ký tự trước hết) bằng cách in giá trị của con trỏ chuỗi như sau:


int

main

(

void

)

{



char

*ᴘ =

"Hello"

;


printf

(

"%dn"

, ᴘ);


return

;


}



Cảnh báo là địa chỉ này sẽ khác nhau khi chạy chương trình trên các máy & môi trường lập trình C khác nhau.

Xem Thêm  jQuery Chọn Giá trị - bộ chọn jquery theo giá trị

Chỉ định địa chỉ trong chuỗi thông qua chuyển dịch con trỏ

Tất cả chúng ta chuyển dịch con trỏ bằng cách cộng trừ nó cho một số nhà cung cấp. & bằng cách chuyển dịch con trỏ, tất cả chúng ta có thể chỉ định tới một địa chỉ trong chuỗi mà tất cả chúng ta cần làm việc với ký tự tại địa chỉ đó.

Chẳng hạn, do con trỏ biểu thị địa chỉ trỏ tới ký tự trước hết (index bằng 0), nên tất cả chúng ta có thể chỉ định địa chỉ của ký tự thứ 2 (có index bằng 1) trong chuỗi bằng cách cộng thêm 1 nhà cung cấp vào con trỏ, hoặc ký tự thứ 4 (có index bằng 3) trong chuỗi bằng cách cộng thêm 3 nhà cung cấp vào con trỏ như sau:


int

main

(

void

)

{



char

α[]=

"Hello"

, *ᴘ;


ᴘ = α;


printf

(

"array[0] address: %dn"

, ᴘ);


printf

(

"array[1] address: %dn"

, ᴘ +

1

);


printf

(

"array[3] address: %dn"

, ᴘ +

3

);



return

;


}


Kết quả, bằng cách chuyển dịch con trỏ 1 nhà cung cấp hoặc một số nhà cung cấp, tất cả chúng ta có thể chỉ định các địa chỉ của các ký tự trong chuỗi như sau:

array[0] address: 908823106


array[1] address: 908823107


array[3] address: 908823109


Hãy cảnh báo vào địa chỉ của array[0] & array[1]. Khi chuyển dịch con trỏ 1 nhà cung cấp, tất cả chúng ta có thể thấy địa chỉ trên bộ nhớ lưu trữ cũng được chuyển dịch tới 1 byte như trên.

Điều đó có nghĩa là khi chuyển dịch con trỏ chuỗi 1 nhà cung cấp thì địa chỉ tương ứng trên bộ nhớ lưu trữ cũng sẽ được chuyển dịch 1 byte. Nguyên nhân là bởi 1 ký tự trong chuỗi kiểu char có kích cỡ là 1 byte, nên khi chuyển dịch sang 1 ký tự trong chuỗi, thì địa chỉ trên bộ nhớ lưu trữ sẽ được chuyển dịch tương ứng là 1 byte.

Bằng cách chuyển dịch con trỏ, tất cả chúng ta có thể chỉ định địa điểm cần truy cập trong chuỗi, & qua đó có thể tiến hành truy xuất ký tự tại địa điểm đó bằng cách dưới đây.

Truy xuất các ký tự trong chuỗi bằng con trỏ

Trong bài Con trỏ trong C là gì tất cả chúng ta đã biết để truy xuất giá trị tại địa điểm con trỏ chỉ đến, tất cả chúng ta viết dấu hoa thị * vào đằng trước tên con trỏ.

Xem Thêm  11 cách để căn giữa Div hoặc văn bản trong Div trong CSS - trung tâm văn bản trong div css

Cách truy xuất các ký tự trong chuỗi bằng con trỏ cũng giống với vậy.

Giả sử tất cả chúng ta có chuỗi array & cho con trỏ chuỗi lưu địa chỉ của nó như sau:

char

α[

100

], *ᴘ;


ᴘ = α;


Thông thường để truy cập vào từng ký tự trong chuỗi, tất cả chúng ta chỉ định index của ký tự đó trong chuỗi, chẳng hạn như α[0] hoặc α[1] ví dụ.

Ngoài ra bằng cách phối hợp tên con trỏ với dấu hoa thị *, tất cả chúng ta cũng có thể truy cập & lấy giá trị của các ký tự trong chuỗi array với cú pháp sau đây:

*(ᴘ + index);

Trong số đó index là index của ký tự cần lấy giá trị trong chuỗi & là con trỏ chuỗi.

Ỏ đây, (ᴘ + index) có ý nghĩa tăng con trỏ một số index nhà cung cấp, nhằm chỉ định địa chỉ của ký tự cần truy cập trên bộ nhớ lưu trữ. & việc thêm hoa thị *(ᴘ + index) nhằm lấy giá trị ký tự tại địa điểm này.

& trong trường hợp index bằng 0, tất cả chúng ta có thể biết được cách viết *ᴘ biểu thị giá trị của ký tự trước hết trong chuỗi.

Cách truy cập vào ký tự trong chuỗi bằng index & bằng con trỏ có thể so sánh như bảng dưới đây:

indexTruy xuất bằng chuỗiTruy xuất bằng con trỏ0a[0]*p1a[1]*(ᴘ + 1)2a[2]*(ᴘ + 2)3a[3]*(ᴘ + 3)………na[n]*(ᴘ + ɳ)

Chẳng hạn rõ ràng:


int

main

(

void

)

{



char

*α =

"Hello"

, *ᴘ;


ᴘ = α;



printf

(

"%cn"

, α[

2

]);


printf

(

"%cn"

, *(ᴘ +

2

) );



printf

(

"%cn"

, α[

4

]);


printf

(

"%cn"

, *(ᴘ +

4

) );


return

;


}


Kết quả, chuỗi & con trỏ đều đặt ra kết quả truy xuất giá trị ký tự giống nhau như sau:

ɭ


ɭ


σ


σ


Nhập xuất chuỗi bằng con trỏ trong c

Bằng cách dùng con trỏ chuỗi, tất cả chúng ta có thể chỉ định địa điểm các ký tự trong chuỗi, cũng như là truy cập & lấy giá trị của các ký tự đó.

Áp dụng điều này, tất cả chúng ta cũng có thể nhập xuất chuỗi bằng con trỏ trong c như sau.

Nhập chuỗi bằng con trỏ trong c

Trong bài Nhập chuỗi trong C tất cả chúng ta đã biết phương pháp nhập trực tiếp giá trị từ keyboard vào chuỗi như sau:

char

str[

100

];


scanf

(

"%s"

, str);


Để nhập chuỗi bằng con trỏ trong c tất cả chúng ta chỉ cần sử dụng con trỏ thay cho chuỗi như sau là xong:

char

str[

100

], *ᴘ;


ᴘ = str;


scanf

(

"%s"

,ᴘ);


Xuất chuỗi bằng con trỏ trong c

Để xuất trực tiếp một chuỗi, tất cả chúng ta viết như sau:

char

str[

100

];


printf

(

"%sn"

, str);


Để xuất chuỗi bằng con trỏ trong c thì sẽ cầu kỳ hơn chút. Tất cả chúng ta sẽ cần chuyển dịch địa điểm con trỏ lần lượt từ đầu chuỗi đến cuối chuỗi & in lần lươt các ký tự tại địa điểm đó.

Xem Thêm  Đầu vào / đầu ra với các tệp - cách đọc trong tệp c ++

Để làm được điều đó, tất cả chúng ta cần một vòng lặp & lặp từ đầu đến cuối chuỗi, cho tới khi gặp ký tự chấm dứt chuỗi thì thôi.

Tất cả chúng ta viết:

char

str[

100

], *ᴘ;


ᴘ = str;


while

(*ᴘ !=

' '

){


printf

(

"%c "

, *ᴘ);


++ᴘ;


}


Chương trình mẫu nhập xuất chuỗi bằng con trỏ trong c

Dưới đây là chương trình mẫu nhập xuất chuỗi bằng con trỏ trong c:



int

main

(

void

)


{


char

α[

256

], *ᴘ;



ᴘ = α;




printf

(

">>Nhap chuoi: "

);


scanf

(

"%s"

,ᴘ);





printf

(

"Xuat chuoi: "

);


while

(*ᴘ !=

' '

){


printf

(

"%c "

, *ᴘ);


++ᴘ;


}



return

(

);


}


Kết quả:

>>Nhap chuoi: Hello


Xuat chuoi: Н e ɭ ɭ σ


Khai báo chuỗi bằng con trỏ trong C

Thông thường, tất cả chúng ta khởi tạo & khai báo chuỗi trong C bằng cách gán trực tiếp chuỗi ký tự cho mảng chuỗi như sau:

char

array_str[] =

"Hello"

;


Ngoài ra, tất cả chúng ta cũng có thể sử dụng con trỏ để khai báo chuỗi với cách viết như sau:

char

*array_str =

"Hello"

;


Trong số đó array_str là tên chuỗi, *array_str là con trỏ lưu địa chỉ của chuỗi.

Khi đó, địa chỉ của bậc nhất trong dãy các ký tự xếp liên tục là 'Н','e','ɭ','ɭ','σ' & trên bộ nhớ lưu trữ laptop sẽ được gán vào biến con trỏ tên là array_str.

& bằng việc thao tác & chuyển dịch con trỏ, tất cả chúng ta có thể tiến hành truy cập & thao tác với các ký tự chứa trong chuỗi này.

Sau thời điểm khởi tạo chuỗi bằng con trỏ chuỗi, tất cả chúng ta có thể truy cập vào ký tự của chuỗi bằng index như các chuỗi bình bình, hoặc là sử dụng con trỏ chuỗi để truy cập ký tự. Chẳng hạn:



int

main

(

void

)

{



char

*array_str=

"Hello"

;


printf

(

"%cn"

, array_str[

3

]);


printf

(

"%cn"

, *(array_str+

3

));



return

;


}


Kết quả của cả hai cách truy cập vào ký tự có index thứ 3 này đều giống nhau như sau:

σ


σ


Kết luận

Trên đây Kiyoshi đã chỉ dẫn các bạn về con trỏ chuỗi trong C rồi. Để nắm vững bài viết bài học hơn, bạn hãy thực hành viết lại các chẳng hạn của ngày từ bây giờ nhé.

& hãy cùng khám phá những học thức sâu hơn về C trong các bài học kế tiếp.

Viết một bình luận