Thắc mắc về size của array trong main và trong function

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 ạ

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[])

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
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?