我是C编程的新手,并试图从概念上理解它。 我跑到了以下函数原型和其他类似的函数原型
size_t strlen( const char *s );
我不太了解返回类型 size_t
答案 0 :(得分:3)
答案 1 :(得分:2)
它基本上是unsigned int
将语义视为“可以保存足够大的数字以存储内存块的最大大小的类型”
答案 2 :(得分:1)
size_t
是C中的数据类型。它是无符号的,能够保存至少与对象最大大小一样大的整数值。
所以你永远不会“溢出”做size_t x = sizeof something;
,它是用于数组索引的正确类型,或malloc
的参数。
您的<stddef.h>
标题由typedef
定义,但这一事实与其使用无关。您应该编写不依赖于typedef实际上是什么的代码。
答案 3 :(得分:1)
根据C99,§7.17
size_t 是在 stddef.h 头文件中定义的,是sizeof运算符结果的无符号整数类型。此外,用于size_t 的类型不应具有大于signed long int 的整数转换等级,除非该实现支持足够大的对象以使其成为必需。
答案 4 :(得分:1)
ISO C11 7.19
(在标准的早期迭代中非常相似)定义size_t
因此:
sizeof运算符的结果的无符号整数类型。
您可以通过添加stddef.h
或stdio.h
来获取它。它不是unsigned int
,而是unsigned short
或unsigned long
,它是一种独特的类型,虽然可以很容易地推广到其他类型。
它只是一个无符号整数类型,从0
到SIZE_MAX
(在stdint.h
中定义,如果你想使用它)包含值,保证至少{{ {1}}。
有些人实际上坚持使用65535
或int
而不是unsigned int
,但如果你想要真正的便携式源代码,这在技术上并不是一个好主意。
标准规定,除非您的实现处理真正大的对象,否则转换等级应小于或等于size_t
- 因为signed long int
很可能是更高的转换排名高于signed long int
,您可能会丢失信息。
当然,你很少会处理大小超过signed int
的东西,这就是为什么你可以大部分逃脱它。
答案 5 :(得分:0)
size_t是c中的无符号int返回类型。