Câu hỏi về con trỏ trong C

Chào mọi người, em mới học lập trình và có 1 thắc mắc trong chương trình em vừa chạy như thế này:

#include<stdio.h>
int main() {
	const char *b="hello vietnam";printf("%s",b);
}

Em muốn hỏi là ở đây em khai báo con trỏ b với giá trị mà con trỏ trỏ đến là hằng xâu ký tự “hello vietnam” thì tại sao khi em in ra màn hình con trỏ b với định dạng là %s thì chương trình lại cho ra là xâu ký tự hello vietnam mà không phải là địa chỉ của hằng xâu ký tự ạ?

Uhm, vì đó là spec của %s mà cậu :smile:
https://www.cplusplus.com/reference/cstdio/printf/

Nếu cậu muốn in ra địa chỉ con trỏ, cậu nên dùng %p.

Hope it helps!

3 Likes

nhưng mà tại sao ở đây b là con trỏ mà khi tớ in ra màn hình với định dạng là %s thì lại ra giá trị mà con trỏ đó trỏ đến thế?
p/s: thanks nha giờ tớ mới biết có %p.

Sorry vì tớ trả lời chậm nhé Quốc Anh! :smile:

Tớ đoán là cậu chưa biết một bí mật, xâu trong C thực ra là một con trỏ :wink:
Thế nên, cậu không thể pass bất cứ thứ gì khác con trỏ vào printf khi cậu dùng %s.

Khi biết điều này rồi, cậu còn thắc mắc tại sao b là con trỏ cho 1 xâu (điều này hiển nhiên, cậu không có cách nào khác để biểu thị xâu ngoài dùng con trỏ), và %s lại in ra giá trị mà con trỏ đó trỏ đến (điều này cũng hiển nhiên, vì spec nói vậy :smile: ) nữa không? :smile:

3 Likes

Cảm ơn cậu nha, giờ tớ hiểu r. Cậu cho tớ hỏi thêm 1 tí được ko, cậu có biết stdlib trong thư viện stdlib.h với atoi trong hàm atoi() là viết tắt của cái gì ko?

1 Like

stdlib = standard @library
atoi = Ascii to integer (convert ký tự từ Ascii sang số)

Hope it helps! :smile:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?