Pointer in C. Dynamic Array

Mình đang học con trỏ trong c, tới phần nhập xuất mảng dùng con trỏ.
Mình thấy khi mình truyền con trỏ vào hàm Nhap(int *arr, int lengh) rồi cấp phát trong hàm này thì kết quả in ra không giống với khi mình nhập vào.
Còn khi mình cấp phát ở bên ngoài hàm Nhap() thì kết quả in ra là đúng.
Các bạn giải thích dùm mình chuyện khác nhau khi cấp phát trong hàm và ngoài hàm với. thanks !

Bạn đã học tham biến và tham trị chưa?

bạn cứ nói đi, mình học rồi. kiểu lâu k dùng C nên quay lại hơi quên chút ^^!

(arr + i) = &a[i].

2 Likes

c làm gì có tham trị nhỉ, c++ mới có chứ

C k có tham chiếu thôi bác

:slight_smile: thì scanf nó cần &a[i] mà. bác nói vậy ý j ?

Cách đơn giản nhất là bạn hãy return cái mảng bạn cấp phát trong hàm nhập. Hoặc Nếu là C/C++ thì dùng thêm tham chiếu nghĩa là tham số phải là int& *arr, nếu là C thì dùng con trỏ cấp 2. Con trỏ bản chất là địa chỉ của 1 biến, khi bạn truyền *arr, bạn đang truyền địa chỉ của biến, như vậy 1 bản sao sẽ đc tạo lập theo nguyên tắc truyền tham trị, khi ra khỏi hàm, địa chỉ này ko thay đổi. Dùng con trỏ cấp 2 thì hơi khó nhìn nên C++ có truyền thêm dấu &, dễ nhìn hơn.

Mình đang trả lời bạn phía trên thôi bác ơi :joy:

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