您现在的位置是:首页 >技术杂谈 >CC++的size_t详解网站首页技术杂谈

CC++的size_t详解

巨龙之路 2024-06-17 11:26:54
简介CC++的size_t详解

2023年5月21,周日早上:

今天早上在看别人的代码时遇到了size_t这个数据类型,于是记录一下自己的学习成果。


什么是size_t

官方文档:https://cplusplus.com/reference/cstring/size_t/

size_t是一个无符号整数类型

size_t全称是size_type,也就是表示大小的数据类型


什么地方会用到size_t

1、需要接收字符串长度时:

char str[] = "Hello world!";
size_t len = strlen(str);   // 计算字符串长度

2、充当数组的下标(也可以说是索引)时:

因为数组的下标不能是负数,而size_t正好是无符号整数,所以size_t不可能是负数。那为什么不用int呢?因为int是有符号整数,可以为负数,所以不用int。

size_t i = 0;
int arr[] = {1, 2, 3};
int x = arr[i];

 一个完整的例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
	int *arr=(int*)malloc(10*sizeof(int));

    for (size_t i = 0; i < 10; ++i) {
        arr[i] = i + 1;        // 赋值
    }

    for (size_t i = 0; i < 10; ++i) {
        printf("arr[%zu] = %d
", i, arr[i]); // 打印数组各元素的值
    }

    free(arr); // 释放分配的内存空间

    return 0;
}

3、用作内存分配函数中参数和返回值类型

许多内存分配函数(如 malloc、calloc、realloc 等)使用 size_t 类型来表示需要分配空间的大小,也使用这种类型来返回所分配内存对象的大小。

void* malloc (size_t size);

void* calloc (size_t num, size_t size);

void* realloc (void* ptr, size_t size);

4、用于标准库函数中参数和返回值类型

标准库中的很多函数,如字符串处理函数 strlen、字符复制函数memcpy 等都使用 size_t 来描述传入/返回值的长度信息。

size_t strlen ( const char * str );

void * memcpy ( void * destination, const void * source, size_t num );

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。