'&' trong scanf là gì?

Em mới nghiên cứu về C nhưng vẫn chưa hiểu:

  1. ý nghĩa của ‘&’ trong scanf
  2. Khi nào thì ta dùng ‘&’ và khi nào thì không cần

Mong a/c giải đáp giúp em ạ.

Cái này đúng bài là phần viết hàm mới dạy cách truyền tham số :slight_smile: tức là sau if, switch, for, while, phép tính.

4 Likes

& này trong C có hai nghĩa.

  • toán tử bitwise. (tạm không nói đến)
  • phép lấy địa chỉ. (sẽ nói về cái này)

Do bạn mới học về C nên mình sẽ tạm thời chưa giải thích gì vội, đến khi có đủ kiến thức chắc bạn cũng sẽ tự tìm hiểu được. :slight_smile:

Mình cũng có post nói sơ qua về cái này nè. Bạn đọc qua nha. :slight_smile:

3 Likes

Mình có nghe 1 anh nói đơn giản như thế này. Nếu như bạn chỉ học đến phần viết hàm thôi. Thì chỉ cần hiểu là “Khi hàm đó thay đổi giá trị của biến thì bạn sử dụng & và khi bạn muốn truyền cái giá trị gì đó từ bàn phím vào biến thì cũng sử dụng &”
Không biết có đúng k, nhưng nghe cũng dễ hiểu :smile:

2 Likes

Đúng nhưng chưa đủ. :slight_smile: Như đoạn code này của mình thì có cần & đâu. :slight_smile:

int *p = (int*)malloc(sizeof(int));
scanf("%d", p);

Vậy nghĩa là miễn sao đưa vô scanf() địa chỉ của biến muốn nhập vô là được. :slight_smile:


Không biết đúng hay sai mà đi truyền đạt lại cho người khác. :grimacing: :grimacing: Vậy thì chết. :smile:

2 Likes

Để hiểu và sử dụng được con trỏ trong C, trước tiên bạn cần hiểu về khái niệm địa chỉ ở trong C. Nếu bạn nào theo dõi khóa học C bá đạo của mình từ đầu thì chắc đã thấy mình nhắc tới khái niệm này rồi. Phần này ta sẽ làm rõ vấn đề này.

int number;
printf("\nNhap number = ");
scanf("%d", &number);
printf("\nnumber = %d", number);

Bạn hãy nhìn ví dụ trên, tại sao khi dùng hàm scanf chúng ta cần truyền vào &number , còn hàm printf ta lại không có dấu & kia? Bởi vì nếu bạn muốn nhập giá trị cho biến, hàm scanf cần biết địa chỉ của biến đó ở trong bộ nhớ.

p/s: Copy lời mở đầu bài con trỏ từ blog của mình.

Còn tại sao ở đây không cần &

int *p = (int*)malloc(sizeof(int));
scanf("%d", p);

=> Bởi vì giá trị của p là địa chỉ mà. => Bạn vẫn truyền vào địa chỉ :smiley:

3 Likes

:)) thì mình chưa đủ trình độ để xác thực câu này đúng hết mọi khía cạnh hay chưa. Nhưng mà nếu như chỉ mới nhập môn thì nói thế sẽ giúp dễ hiểu hơn

Nếu là chuỗi thì lại càng không đúng :slight_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?