Đừng lấy tư duy C áp đặt vào C++, ở C++ pass by reference và pass by pointer là hai thứ khác nhau nhé.
int nhap(int &n)
Đây là pass by reference hình như tiếng việt gọi là truyền tham chiếu. Hàm này tham số được sử dụng trong hàm sẽ trực tiếp thay đổi giá trị của biến được truyền vào, thay vì tạo ra một local variable và copy giá trị như trong pass by value, truyền tham trị.
int nhap(int *n)
Còn đây gọi là pass by pointer, truyền con trỏ. Mà con trỏ thì lưu giữ địa chỉ của biến được truyền vào, trên thực tế, truyền bằng con trỏ tuơng tự với pass by value (nhưng trong truờng hợp này, value là address). Để thay đổi được giá trị do con trỏ chỉ vào ta phải sử dụng dereferencing operator (dấu ‘*’) để truy cập giá trị của biến được con trỏ trỏ đến. Trong hàm này thì thứ có thể thay đổi được là biến được con trỏ trỏ đến, không thể thay đổi biến con trỏ -> tuơng tự như pass by value.
Code của bạn Duc Nguyen vấn đề nằm ở điều kiện vòng lặp. Lời khuyên là nên viết thuật toán ra giấy, khi nào thuật toán có thể thực hiện được trên lý thuyết thì mới bắt đầu code. Cũng tuơng tự như làm toán, phải tìm được hướng đi đúng, giải bài toán, rồi mới trình bày.
P/S: Hơi đi lạc đề chút.