30/09/2018, 17:32
Vấn đề về con trỏ , mảng trong C
E có hai ví dụ sau (e xin phép không khai báo thư viện cho nhanh):
int main()
{
char string[]="helloworld";
char *tim=NULL;
tim=strchr(string,'d');
if (tim!=NULL)
{
printf("ket qua la %s
",tim);
}
}
Ví dụ 2
int main()
{
int tuoi=10;
int *pointer1=&tuoi;
printf("gia tri cua bien tuoi la %d
",*pointer1);
}
Vấn đề e muốn đặt ra là tại sao ở ví dụ 1 con trỏ (tức biến tim trong phần printf không có dấu sao nhưng nó vẫn in ra giá trị biến kí tự mà nó trỏ vào. Còn nếu có thì lỗi) . Còn ví dụ 2 trong phần printf thì phải có * thì con trỏ mới in ra giá trị biến tuổi nó trỏ vào, còn nêuu không thì nó sẽ in ra giá trị của con trỏ pointer 1. Tại sao lại có sự khác biệt này ạ ??
Bài liên quan
Bởi vì nó là con trỏ rồi. Lệnh
printf
với%s
sẽ cần một con trỏ kiểuchar *
. Trong lúc nàytim
đã làchar *
như khai báo ở trên, thế nên em không cần phải làm gì nữa cả. Nếu thêm*
vào sẽ là sai.Bởi vì lệnh
printf
với%d
sẽ cần một biến kiểuint
. Trong lúc nàypointer1
là một con trỏ kiểuint *
. Thế nên em phải đặt một dấu*
ở phía trước củapointer1
. Điều này có nghĩa ta sẽ tạm thời biến con trỏ kiểuint * pointer1
trở thành một biến kiểuint
, không còn là con trỏ nữa.Như thế nó sẽ phù hợp với yêu cầu của lệnh
printf
với%d
là cần một biến kiểuint
.Mỗi
%s
,%d
,%c
,%p
, … yêu cầu một kiểu dữ liệu khác nhau. Em xem bảng dữ liệu này để biết mỗi dấu%
có ý nghĩa như thế nào.http://www.cplusplus.com/reference/cstdio/printf/
C.ơn a ! Em hiểu vấn đề rồi ạ !!! Diễn đàn thật bổ ích
Nếu em thấy câu trả lời của anh đúng thì em bấm vào trên câu trả lời của anh để xác nhận nhé.
E còn 1 bài nữa chưa hiểu a Đạt giải đáp luôn được không ạ ??
Em lập topic cho câu hỏi khác. Mỗi topic một câu hỏi thôi