在C中使用Sizeof计算数据类型的大小
在C编程语言中,以及基于C的几种语言,运算符运算符可用于计算一个数据类型在内存中占用的字节数。这在使用结构和动态内存分配时特别有用Malloc.,或者在编写旨在在不同平台上的C编译器之间移植的代码时。在不同的系统上编译时,某些数据类型的大小可能不同,能够在程序中检测到这一点有助于使转换过程更容易。
在这一解释方案运算符,描述了很少的其他语言特征。初学者可能希望首先在Udemy.com学习C语言编程的基础知识在阅读尺寸操作员之前。如何在计算机系统中组织内存的工作知识也可能是有用的,并且与Java的每个人的计算机科学介绍了许多C和Java程序员都需要的背景信息。
语法和基本数据类型的大小
C语言中的基本数据类型(char、short、int、long、float和double)可能有不同的大小,这取决于您正在使用的语言的实现,以及目标机器的中央处理器(CPU)中的数据总线的大小。C语言规范通常只设置这些类型的最小大小。
您可以使用运算符返回这些类型的精确大小:
/ * * udemy.com *使用sizeof * * / #includevoid main(){printf(“\ r \ nudemy.com - 计算数据类型大小的数据类型c使用sizeof \ r \ n \ r \ n“);printf(“char:%u \ r \ n”,sizeof(char));printf(“短:%u \ r \ n”,sizeof(short));printf(“int:%u \ r \ n”,sizeof(int));printf(“long:%u \ r \ n”,sizeof(long));printf(“float:%u \ r \ n”,sizeof(float));printf(“双重:%u \ r \ n”,sizeof(双));}
C的大多数实现要么将值返回为整数,或者更常见,作为一个size_t数据类型。size_t.使用时,值将自动投射到其他整数类型。
尺寸也可以接受变量的名称,并将返回其底层类型的大小。使用变量时,运算符通常可以像上面的例子一样用括号调用,也可以不用括号调用,如下所示:
void main(){int i = 0;printf(“i:%u \ r \ n”,sizeof i);}
您应该注意到,C预处理器负责处理宏和预处理器指令,并不了解类型等运算符操作符不能在指令中使用#如果。
结构
根据您的系统,返回的典型值sizeof (char)将为1,因为char类型通常存储为单个字节。理论上,包含三种char类型的结构的大小为3。在本教程中用于测试代码的编译器上,答案是肯定的。
/* * * Udemy.com *使用Sizeof计算C中数据类型的大小* */ #includestruct Test {char c1;char c2;char c3;} myTest;void main() {printf("Struct: %u\r\n", sizeof myTest);}
你可以通过传递一个声明的该类型的变量作为参数来计算结构体的大小sizeof(),或使用关键字塑造在sizeof()的调用中。例如:sizeof(结构测试)。
在第一个例子中,sizeof(短)返回2 - 短路通常存储为16位数,由两个字节组成。因此,包含一个短类型和两个Char类型的结构的大小应该是4。但它通常不是。
/* * * Udemy.com *使用Sizeof计算C中数据类型的大小* */ #includestruct Test {char c1;短s2;char c3;} myTest;void main() {printf("Struct: %u\r\n", sizeof(myTest));}
如果您使用Microsoft Visual Studio的C编译器及其默认的编译器设置,这个结构的大小是6字节,而不是4字节。这是因为编译器使用了结构包,使其更方便地处理结构。虽然打包通常可以使用编译器指令进行更改,但每个编译器的指令通常是不同的,所以如果你想让你的代码在不同的编译器上按原样编译,你可能需要依赖于usingsizeof()当为结构分配内存时,从输入流读取它们,或将它们写入输出流。
数组、字符串和指针
Sizeof ()可以与阵列和C字符串一起使用。但是,它并不总是在您期望的情况下工作。通常返回数组的大小sizeof()作为它占据的总字节数。因此,包含100项类型的数组int(通常为四个字节),大小为400字节。
要计算阵列的长度(它包含的项目数),您可以使用该表达式:
sizeof(数组)/ sizeof(阵列[0])
例如:
void main(){int buf [100];printf(“阵列大小:%u \ r \ n”,sizeof(buf));printf(“阵列长度:%u \ r \ n”,sizeof(buf)/ sizeof(buf [0]));}
将参数传递给使用的函数时必须注意sizeof()来确定它们的大小。如果您使用指针而忘记添加解引用操作符sizeof()将返回指针的大小,而不是它所指向的对象的大小。
/ * * * * udemy.com *使用sizeof * * / #include#include typedef struct test {char c1;char c2;char c3;} myTest;void main(){mytest * mtest;printf(“\ r \ nudemy.com - 使用sizeof计算C中的数据类型的大小”);mtest =(mytest *)malloc(sizeof(mytest));printf(“指针大小:%u \ r \ n”,sizeof(mtest));printf(“结构大小:%u \ r \ n”,sizeof(* mtest));免费(MTEST); }
进一步阅读
用自C的语言,例如C ++和Object-C,运算符操作符主要以与这里描述的相同的方式处理基本数据类型。然而,类和对象通常会以类似于C结构体的方式打包和填充,或者实际上可能是指针。在这两种情况下,使用运算符操作员可以是尴尬的,通常提供其他功能或运营商来完成工作。
本介绍中的示例是相对基本的,但涉及到初学者可能不熟悉的语言特性的使用。如果任何代码示例不清楚,您可以在Udemy.com上学习C程序在一个非常全面的课程,涵盖结构,动态内存管理Malloc(),以及此处使用的控制台输出函数。