Nếu biểu thức type name[count]được viết trong một số hàm thì bạn báo cho trình biên dịch C phân bổ trên sizeof(type)*countbyte khung ngăn xếp và tính địa chỉ của phần tử đầu tiên trong mảng.
Nếu biểu thức type name[count]được viết bên ngoài tất cả các định nghĩa hàm và cấu trúc thì bạn yêu cầu trình biên dịch C phân bổ trên các sizeof(type)*countbyte của phân đoạn dữ liệu và tính địa chỉ của phần tử đầu tiên trong mảng.
namethực sự là đối tượng hằng lưu trữ địa chỉ của phần tử đầu tiên trong mảng và mọi đối tượng lưu trữ địa chỉ của một số bộ nhớ được gọi là con trỏ, vì vậy đây là lý do bạn coi namelà con trỏ chứ không phải là mảng. Lưu ý rằng các mảng trong C chỉ có thể được truy cập thông qua các con trỏ.
Nếu countlà một biểu thức hằng ước lượng bằng 0 thì bạn yêu cầu trình biên dịch C phân bổ byte bằng 0 trên khung ngăn xếp hoặc phân đoạn dữ liệu và trả về địa chỉ của phần tử đầu tiên trong mảng, nhưng vấn đề trong việc này là phần tử đầu tiên của mảng có độ dài bằng không tồn tại và bạn không thể tính địa chỉ của thứ gì đó không tồn tại.
Đây là lý do mà yếu tố không. count+1không tồn tại trong countmảng thứ cấp, vì vậy đây là lý do mà trình biên dịch C cấm định nghĩa mảng có độ dài bằng 0 là biến trong và ngoài hàm, bởi vì nội dung của namenó là gì? Địa chỉ nào namelưu trữ chính xác?
Nếu plà một con trỏ thì biểu thức p[n]tương đương với*(p + n)
Trong đó dấu hoa thị * trong biểu thức bên phải là hoạt động bổ nhiệm của con trỏ, có nghĩa là truy cập vào bộ nhớ được trỏ bởi p + nhoặc truy cập vào bộ nhớ có địa chỉ được lưu trữ p + n, trong đó p + nlà biểu thức con trỏ, nó lấy địa chỉ pvà thêm vào địa chỉ này nnhân số kích thước của loại con trỏ p.
Có thể thêm một địa chỉ và một số?
Có, bởi vì địa chỉ là số nguyên không dấu thường được biểu diễn trong ký hiệu thập lục phân.