như mọi người đã thấy, tại sao lại có sự khác biệt như thế ạ ? là sao để e có thể truyền full 1 cái size array ạ
Thắc mắc về size của array trong main và trong function
Trước hết cần làm rõ toán tử sizeof là gì. Toán tử sizeof sẽ lấy ra được kích thước của vùng nhớ của 1 biến, không phải lấy ra kích thước của 1 mảng.
Quay lại vấn đề của bạn thì biến arr[10] ở ngoài hàm main có kích thước là 40 bytes (4 * 10).
Khi truyền arr[10] vào hàm nani của bạn thì biến arr sẽ pass by value. Lúc này biến arr[] bên trong hàm nani sẽ có kích thước 8 bytes (kích thước của biến con trỏ = kích thước của address space)
2 cú pháp
void nani(int arr[])
Và
void nani(int *arr)
Là không có sự khác biệt.
Ps: để truyền mảng vào hàm thì ngoài mảng bạn cần truyền thêm kích thước của mảng vào nữa chứ không có cách nào lấy ra được kích thước mảng
5 Likes
Lưu ý quan trọng (mà giờ mình mới để ý): sizeof
không phải là một hàm (function) mà là một toán tử (operator).
Cảm ơn @qloved
3 Likes