C 語言中的 size_t

Ammar Ali 2023年10月12日
C 語言中的 size_t

本教程將討論使用 size_t 命令在 C 語言中定義無符號資料型別變數。

C 語言中的 size_t

size_t 命令在 C 語言中定義了一個無符號資料型別變數。無符號資料型別不能為負數,因此 size_t 命令是一種類似於 int 的資料型別,用於正整數值的情況。

例如,如果我們想計算某個東西或求一個陣列的長度,我們可以使用 size_t 命令定義一個變數,該變數將儲存一個正值,因為陣列的計數和長度都是從 0 開始的,並且它不能為負。

sizeof() 函式以位元組為單位返回數字的大小,我們可以使用 size_t 命令儲存 sizeof() 函式返回的值。

size_t 資料型別使用至少 16 位記憶體來儲存一個值。

許多函式如 strcspn()strlen() 函式的返回型別是資料型別 size_t。要使用 size_t 資料型別,我們必須包含 stddef.hstdint.h 標頭檔案,因為 size_t 資料型別依賴於這兩個標頭檔案。

例如,讓我們定義一個陣列並使用 sizeof() 函式找到它的大小,並將其儲存在 size_t 資料型別的變數中。請參閱下面的程式碼。

#include <stddef.h>
#include <stdint.h>
#include <stdio.h>

int main(void) {
  const size_t len = 100;
  int My_array[len];
  for (size_t i = 0; i < len; ++i) My_array[i] = i;
  size_t size = sizeof(My_array);
  printf("size of array = %lu\n", size);
}

輸出:

size of array = 400

在上面的程式碼中,len 變數用於儲存陣列的長度,我們使用 for 迴圈來填充陣列 My_array。我們使用 printf() 函式來列印給定陣列的大小。

我們在 printf() 函式中使用%lu 字串,因為 sizeof() 函式的輸出是一個 size_t 型別的長無符號整數。

我們在 printf() 函式中使用\n 字串在 size 變數的值列印後新增新行,否則游標將移動到新行。

我們可以使用 size_t 資料型別來儲存物件的大小,如果我們想儲存其他一些也可以是負數的值,我們應該使用另一種資料型別,例如 int

如果我們想找到兩個 size_t 資料型別值之間的差異,在某些情況下我們無法找到確切的結果;如果第一個值小於第二個值,則結果應該為負,但在這種情況下結果將為正,因為差值是在兩個無符號值之間計算的。

在這種情況下,我們必須使用另一種資料型別,如 intfloat。如果 size_t 資料型別實現是 64 位,它將是 64 位寬;如果實現是 32 位,它將是 32 位寬,依此類推。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook