Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Kích thước con trỏ void trong C/C++

Kích thước con trỏ void* phụ thuộc kiến trúc hệ thống:

  • 16-bit: 2 bytes
  • 32-bit: 4 bytes
  • 64-bit: 8 bytes

Tương tự mọi con trỏ dữ liệu (data pointer) trên cùng kiến trúc đều cùng kích thước.

Ví dụ

#include <stdio.h>

int main() {
    void *ptr;
    printf("Kich thuoc void*: %zu bytes\n", sizeof(ptr));
    printf("Kich thuoc int*: %zu bytes\n", sizeof(int*));
    printf("Kich thuoc char*: %zu bytes\n", sizeof(char*));
    printf("Kich thuoc double*: %zu bytes\n", sizeof(double*));
    return 0;
}

Kết quả (64-bit)

Kich thuoc void*: 8 bytes
Kich thuoc int*: 8 bytes
Kich thuoc char*: 8 bytes
Kich thuoc double*: 8 bytes

Giải thích: Trên hệ 64-bit, mọi con trỏ dữ liệu đều 8 bytes (64 bit địa chỉ). void* là con trỏ chung (generic pointer) có thể ép sang bất kỳ con trỏ dữ liệu nào.

Lưu ý:
  • Con trỏ hàm (function pointer) có thể khác kích thước (ví dụ: Harvard architecture).
  • sizeof(void*) dùng để xác định kiến trúc: 4=32-bit, 8=64-bit.
  • In kích thước con trỏ dùng %zu (cho size_t) hoặc %p cho địa chỉ.