Bộ nhớ có thể cấp phát theo 2 cách:

Cấp phát bộ nhớ tĩnh (Static Memory Allocation)
Biến tĩnh được định nghĩa trong một khối bộ nhớ cố định. Một khi cấp phát thì không thể giải phóng.
- Địa chỉ lấy được bằng toán tử '&' và gán cho con trỏ.
- Bộ nhớ cấp phát tại thời điểm biên dịch (compile time).
- Sử dụng stack để quản lý.
- Kích thước bộ nhớ không thể thay đổi sau khi cấp phát.
- Kém hiệu quả hơn cấp phát động.
Kích thước biến được xác định trước khi chạy chương trình → gọi là cấp phát tĩnh (còn gọi là cấp phát tại compile-time). Không thể thay đổi kích thước biến đã cấp phát tại compile-time.
Ví dụ 1: Mảng tĩnh
#include <stdio.h>
int main() {
int a[5] = {10, 20, 30, 40, 50};
int i;
printf("Các phần tử mảng: ");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
return 0;
}
Kết quả ví dụ 1
Các phần tử mảng: 10 20 30 40 50
Ví dụ 2: Tính tổng và tích các phần tử mảng
#include <stdio.h>
void main() {
int array[5] = {10, 20, 30, 40, 50};
int i, sum = 0, product = 1;
for(i = 0; i < 5; i++) {
sum += array[i];
product *= array[i];
}
printf("Tổng các phần tử: %d\n", sum);
printf("Tích các phần tử: %d\n", product);
}
Kết quả ví dụ 2
Tổng các phần tử: 150
Tích các phần tử: 12000000