Giả sử rằngSự khác nhau giữa mảng và mảng là gì?
int array[16];
Có được chuyển đổi tiêu chuẩn gọi là chuyển đổi mảng-to-con trỏ, vì vậy array
sẽ được chuyển đổi ngầm để gõ int*
, nhưng tại sao &array
bằng array
?
Ví dụ,
int array[16];
void *p = array;
void *q = &array;
printf("%p\n", p);
printf("%p\n", q);
Điều này sẽ cho ra cùng một địa chỉ và không có lỗi biên dịch.
Tại sao?
Không hoàn toàn đúng. Trong hầu hết các trường hợp, một tên mảng phân rã thành một con trỏ tới phần tử đầu tiên trong mảng, nhưng lấy ví dụ này: 'char foo [20] =" bar "; size_t size = sizeof foo; ', nếu' foo' sẽ là con trỏ, 'size' sẽ là 4 hoặc 8, nhưng trên thực tế nó sẽ là 20 –
@EliasVanOotegem cảm ơn vì đã chỉ ra điều này, bạn chính xác –