01/10/2018, 14:44

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 !

rogp10 viết 16:49 ngày 01/10/2018

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

Nguyen Trong Dung viết 16:54 ngày 01/10/2018

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 ^^!

Florastamine viết 16:50 ngày 01/10/2018

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

Trâu Gia Gia viết 16:47 ngày 01/10/2018

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

Nguyen Trong Dung viết 16:58 ngày 01/10/2018

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

Nguyen Trong Dung viết 16:49 ngày 01/10/2018

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

kiencon viết 16:56 ngày 01/10/2018

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.

Florastamine viết 16:57 ngày 01/10/2018

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

Bài liên quan
0