Phân biệt int* p và int *p, vấn đề về reference

Xin chào mọi người. Em đang mới tập tành học C++ và gặp tới int* trong cuốn sách của Bjarne Stroustrup nhưng khi code C thì chúng ta lại dùng int *. Em có tìm hiểu trên stackoverflow thì thấy là sự khác biệt này đến từ cách nhìn nhận khác biệt của 2 ông tác giả C và C++. Thì mọi người có thể cho em hỏi là mình nên nhìn nhận cái nào hợp lí hơn. Vì khi em sử dụng theo style của C++ thì xuất hiện vấn đề là khi mình khai báo nhiều biến trên cùng một dòng thì lại rất vô lý. Ví dụ:int* p1, p2; (ở đây chỉ p1 là pointer, p2 là integer). Nhưng khi dùng ở một ngữ cảnh khác: int *&p; (ở đây mình có thể tách ra thành int* &p; sẽ dễ đọc và hiểu hơn) thì lại hợp lí. Mọi người có thể cho em ý kiến về vấn đề này không? Và cho em hỏi có phải trường hợp int* &p; có phải &p là một reference tới một pointer không? Cảm ơn mọi người rất nhiều.

int *p hay int* p đều đúng.
p có kiểu int *, lẽ ra cách khai báo thứ hai mới là chính xác. Tuy nhiên trong C, C++ thì có một vấn đề. Nếu bạn khai báo như sau:

int* a, b;

Ta sẽ có a là kiểu int* còn b là kiểu int, điều đó dẫn đến convention là gắn * vào tên biến để đỡ nhầm. Trong ngôn ngữ thế hệ sau dùng con trỏ là C# thì khai báo như trên sẽ cho 2 con trỏ, đó là một trong những điểm mình yêu thích.

3 Likes

Hi Anh Phạm.
Mình được training cách viết int *p. Khi đó đọc là : biến p là một con trỏ * trỏ đến một biến kiểu int
Kiểu dữ liệu trong C/C++: Kiểu dữ liệu với con trỏ (Cái này mình viết chưa rõ lắm hôn nào sửa lại).
int *&p : biến p là một biến tham chiếu & đến một con trỏ * trỏ đến một biến kiểu int.

2 Likes

Oh vấn đề ở đây là convention của C++ có vẻ mâu thuẫn nhau ở chỗ này nên mình nghĩ tùy trường hợp thì dùng cách tương ứng. Mình khá là quan tâm tới convention khi code để tạo ra những dòng code chất lượng nên khá là muốn tìm hiểu sâu về phần này. Cám ơn bạn đã trả lời câu hỏi. Have a nice day!

Aw đúng là convention về con trỏ phức tạp thật. Bài viết khá chi tiết để hiểu về con trỏ và convention của con trỏ. Cảm ơn bạn đã trả lời câu hỏi và bài viết nhé. Have a nice day!

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