Bên cạnh những điểm đã được bàn luận khi chính xác không gian được giải phóng, và liệu xây dựng được hỗ trợ ở tất cả, đó cũng là điều này:
- Trong trường hợp
alloca
, bytes
có một kiểu con trỏ.
- Trong trường hợp
[]
, bytes
có loại mảng.
Sự khác biệt đáng chú ý nhất là ở những gì sizeof(bytes)
là; cho một con trỏ nó là kích thước của con trỏ (sizeof(void *)
) trong khi đối với một mảng nó là kích thước của không gian được phân bổ (sizeof(char) * size
, trong đó = size
cho trường hợp này kể từ sizeof(char)
= 1).
(Ngoài ra, trong ví dụ của bạn, các loại yếu tố khác nhau;. Để được như vậy, đầu tiên nên được thay đổi để char *bytes = alloca(size)
)
Nguồn
2010-04-10 19:26:44
Câu trả lời phụ thuộc nhiều vào việc 'kích thước' là hằng số biên dịch hay không. Là nó? – AnT
không, kích thước là, cho tất cả các mục đích và mục đích, một đối số cho hàm –
Điều đó không quan trọng. Apple, theo mặc định, sử dụng '--std = gnu99' hỗ trợ cả hai. 'alloca()' là một phần mở rộng của GNU, và mảng độ dài biến là một tính năng C99 tương thích tiêu chuẩn. –