在C語言中,很多庫參數的參數和返回值的數據類型是size_t,讓很多初學都不理解。size_t不是C語言的關鍵字,也不是基本數據類型,而是C語言自定義的數據類型。
例如以下庫函數的聲明:
size_t strlen(const char *s);
void *memset(void *s, int c, size_t n);
char *strncpy(char *dest, const char *src, size_t n);
void *malloc(size_t size);
2、測試size_t類型
關於size_t的定義,百度一下,發現有很多種說法,這些說法不一定準確,不同的操作系統,不同的C語言編譯器和版本各不相同,我們用以下代碼來測試一下。
/*
* 程序名:book.c,此程序用於測試size_t類型。
* 作者:C語言技術網(www.freecplus.net) 日期:20190525。
*/
#include <stdio.h>
#include <string.h>
int main()
{
size_t ii;
ii=1234567890;
printf("ii=%ld,sizeof(ii)=%ld\n",ii,sizeof(ii));
ii=-1234567890;
printf("ii=%ld,sizeof(ii)=%ld\n",ii,sizeof(ii));
}
運行效果
我採用的是64位的CentOS7,從上面測試的結果可以看出,size_t其實就是一個8字節的長整數。
那麼C語言編譯器爲什麼要定義size_t?使用size_t可能會提高代碼的可移植性、有效性或者可讀性,它的定義大致如下:
typedef unsigned long size_t;
沒什麼特別。
2、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果這篇文章對您有幫助,請點贊支持,或在您的博客中轉發此文,讓更多的人可以看到它,謝謝!!!