猿问

C码是多少?

C码是多少?

我被弄糊涂了size_t在C中,我知道它是由sizeof接线员。但到底是什么?是数据类型吗?

假设我有一个for循环:

for(i = 0; i < some_size; i++)

我应该用int i;size_t i;?


胡子哥哥
浏览 695回答 3
3回答

慕田峪4524236

size_t是无符号类型。因此,它不能表示任何负值(<0)。当你在计算某件事时,你会使用它,并且确信它不会是负面的。例如,strlen()返回size_t因为字符串的长度必须至少为0。在您的示例中,如果循环索引总是大于0,则使用size_t,或任何其他无符号数据类型。当您使用size_t对象,您必须确保在所使用的所有上下文中,包括算术,都需要非负值。例如,假设您有:size_t&nbsp;s1&nbsp;=&nbsp;strlen(str1);size_t&nbsp;s2&nbsp;=&nbsp;strlen(str2);你想找出str2和str1..你不能:int&nbsp;diff&nbsp;=&nbsp;s2&nbsp;-&nbsp;s1;&nbsp;/*&nbsp;bad&nbsp;*/这是因为分配给diff总是一个正数,即使当s2 < s1,因为计算是用无符号类型完成的。在这种情况下,取决于用例是什么,您最好使用int(或long long)s1和s2.C/POSIX中有一些函数可以/应该使用size_t但不要因为历史原因。例如,第二个参数fgets理想情况下size_t,但是.int.

浮云间

size_t可以容纳任何数组索引的类型。视具体实现而定,它可以是以下任何一种:unsigned charunsigned shortunsigned intunsigned longunsigned long long以下是如何size_t定义为stddef.h我的机器:typedef&nbsp;unsigned&nbsp;long&nbsp;size_t;
随时随地看视频慕课网APP
我要回答