Casting (ép kiểu)

  • All objects in C have specified type:
    Type variable  char, int, float, double, …
    Pointers  point  to type char, int, float, double, …
  • Elements with the same type.
    int / int -> int, float / float -> float
    Example: 2 / 4 = 0 and 2.0 / 4.0 = 0.5
  • Elements with the different type.
    Sẽ ép kiểu ngầm định theo kiểu dữ liệu cao hơn.

    float / int -> float / float, double/float -> double/double, ….
    Example: 2.0 / 4 = 2.0 / 4.0 = 0.5

The syntax in C: (type) <expression>

Chú ý khi ép kiểu tử kiểu dữ liệu cao xuống kiểu dữ liệu thấp hơn nó có thể mất dữ liệu nên cần chú ý:
unsigned int u32KieuDuLieuInt = 300;
unsigned char u8KieuDuLieuInt;
u8KieuDuLieuInt = (unsigned char)u32KieuDuLieuInt;
Sau đó in ra u8KieuDuLieuInt thì kêt quả u8KieuDuLieuInt = 44 vì u32KieuDuLieuInt có kiểu dữ liệu là 4bytes(int) nhưng ép xuống dữ liệu 1byte(char).

Phân vùng nhớ

  • Text :
    – Quyền truy cập chỉ Read và nó chưa lệnh để thực thi nên tránh sửa đổi instruction.
    – Chứa khai báo hằng số trong chương trình (.rodata)
  • Data:
    – Quyền truy cập là read-write.
    – Chứa biến toàn cục or biến static với giá trị khởi tạo khác không.
    – Được giải phóng khi kết thúc chương trình.
  • Bss:
    – Quyền truy cập là read-write.
    – Chứa biến toàn cục or biến static với giá trị khởi tạo bằng không or không khởi tạo.
    – Được giải phóng khi kết thúc chương trình.
  • Stack:
    – Quyền truy cập là read-write.
    – Được sử dụng cấp phát cho biến local, input parameter của hàm,…
    – Sẽ được giải phóng khi ra khỏi block code/hàm
  • Heap:
    – Quyền truy cập là read-write.
    – Được sử dụng để cấp phát bộ nhớ động như: Malloc, Calloc, …
    – Sẽ được giải phóng khi gọi hàm free,…

https://www.geeksforgeeks.org/memory-layout-of-c-program/
https://www.geeksforgeeks.org/type-conversion-c/

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *