C语言中“SIZEOF(INT)“是啥意思?有啥作用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中“SIZEOF(INT)“是啥意思?有啥作用?相关的知识,希望对你有一定的参考价值。
C语言中“SIZEOF(INT)“指的是求括号中的类型,或者变量的大小。
比如这里x应该是个int型数组,那么用这个数组的大小,除以int型数据的大小,就得到这个数组的长度。(注:这个数组必须是静态数组)
sizeof是计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\\0"的大小)。
在32位的系统中,sizeof(int)的值为4。
如果x是int型的数组,则sizeof(x)/sizeof(int)代表x的位数。
扩展资料:
sizeof的使用方法:
1、用于数据类型
sizeof使用形式:sizeof(type)
数据类型必须用括号括住。如sizeof(int)。
2、用于变量
sizeof使用形式:sizeof(var_name)或sizeof var_name。
变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。
注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。
如sizeof(max)若此时变量max定义为int max(),sizeof(char_v)。若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。
参考资料来源:百度百科—sizeof
参考技术AC语言中“SIZEOF(INT)“指的是求括号中的类型,或者变量的大小。
比如这里x应该是个int型数组,那么用这个数组的大小,除以int型数据的大小,就得到这个数组的长度。(注:这个数组必须是静态数组)
sizeof是计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\\0"的大小)。
在32位的系统中,sizeof(int)的值为4。
如果x是int型的数组,则sizeof(x)/sizeof(int)代表x的位数。
扩展资料:
sizeof有三种语法形式,如下:
1、sizeof(object);//sizeof(对象);
2、sizeof(type_name);//sizeof(类型);
3、sizeof object;//sizeof对象;所以,
1、int i;2、sizeof(i);//ok3、sizeof i;//ok4、sizeof(int);//ok5、sizeof int;//error同种类型的不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。
如:
1、sizeof(2);//2的类型为int,所以等价于sizeof(int);
2、sizeof(2+3.14);//3.14的类型为double,2也会被提升成double类型,所以等价于sizeof(double);sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。
参考资料:百度百科-sizeof
参考技术Bsizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占字节个数的操作运算符。sizeof(int)的作用是算出int类型的长度 。
对于数据类型的sizeof,取决于CPU位数,编译器,汇编等,32位系统下是4个字节,64位系统化下是8个字节。
扩展资料:
Sizeof与Strlen的区别与联系
(1)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。其值在编译时即计算好了,strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度。
(2) sizeof是运算符,strlen是函数。
(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\\0”结尾的。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
参考资料来源:百度百科-sizeof
计算参数的长度,单位为字节。
在16位系统上,如dos、tc,Sizeof(int)=2;
在32系统上,=4.
在数据处加入它,是为了保持数据的完整性和兼容型
例如:fwrtie()中的len就需要sizeof,以保证在不同的系统中保持数据的一致性。
“new int[5]”和“malloc(5 * sizeof(int))”在 C++ 中有啥区别? [复制]
【中文标题】“new int[5]”和“malloc(5 * sizeof(int))”在 C++ 中有啥区别? [复制]【英文标题】:What's the difference in C++ between "new int[5]" and "malloc(5 * sizeof(int))"? [duplicate]“new int[5]”和“malloc(5 * sizeof(int))”在 C++ 中有什么区别? [复制] 【发布时间】:2012-10-10 12:37:03 【问题描述】:可能重复:What is the difference between new/delete and malloc/free?
它们在功能上是否相同,是调用 delete 时需要使用 [] 运算符的唯一区别,还是我还缺少其他东西?
谢谢
【问题讨论】:
切勿将delete
或delete []
与malloc
一起使用!使用free
。
malloc
是 C 主义。它需要强制转换并且应该与free
匹配,而不是delete
/delete[]
。 (你有什么理由不使用std::vector<int>
?)
new
确保调用对象的构造函数!
This pretty much answers this,以及您可能关于的所有其他问题。
这可能会让你大吃一惊,但new int[5];
和new int[5]();
也有非常相关的区别。
【参考方案1】:
正如 Mehrdad 在 this question: 中所说的那样
malloc 分配未初始化的内存。分配的内存必须用 free 释放。
new 通过调用构造函数(如果它是一个对象)来初始化分配的内存。用 new 分配的内存应该用 delete 释放(这反过来又调用析构函数)。它不需要您手动指定所需的大小并将其转换为适当的类型。因此,它更现代且不易出错。
注意:- new 是运算符,malloc 是函数
【讨论】:
在这种情况下,malloc 和 new 都未初始化值,因为 int 是本机类型。 我认为 OP 的问题更多是关于功能,因为他问“它们在功能上是否等效......” 当 new 有对象时,不仅为对象分配空间,而且调用对象的构造函数。同样,当作为对象删除时,对象的析构函数在内存释放之前被调用。如果使用 malloc 和 free,则不会分别调用析构函数和构造函数,显然,这在 C++ 中根本不会这样做,除非在某些非常罕见的情况下,类存在而没有任何特定的析构函数/构造函数。 Operator new 自动计算它所构造的对象的大小。相反,使用 malloc(),程序员必须明确指定必须分配的字节数。此外,malloc() 返回 void *,它必须显式转换为所需的类型。这既乏味又危险。运算符 new 返回一个指向所需类型的指针,因此不需要显式类型转换。new
是一个运算符。 C++ 中的运算符是内部函数调用。【参考方案2】:
有几个不同之处。
首先,必须使用delete[]
释放new int[5]
,并且必须使用free
释放malloc(...)
。你不能混搭。
其次,如果你使用带有构造函数的类型,那么malloc
不会调用构造函数,free
不会调用析构函数。您必须手动调用它们(或只使用new
/free
)。
【讨论】:
【参考方案3】:new 运算符在失败的情况下调用 new_handler,并可能引发 std::bad_alloc 异常。 malloc() 不做这些事情。
【讨论】:
【参考方案4】:运营商新的和新的[]。
为了请求动态内存,它存在操作符 new。 new 后跟数据类型和可选的括号 [] 中所需的元素数。它返回一个指向新分配内存块开始的指针。
它的形式是:pointer = new type orpointer = new type [elements] 第一个表达式用于分配内存以包含一个单一类型的元素。第二个用于分配类型元素的块(数组)。例如:
int * 鲍比;
bobby = new int [5];
在这种情况下,操作系统在堆中为 5 个 int 类型的元素分配了空间,并返回了一个指向其开头的指针,该指针已分配给 bobby。因此,现在,bobby 指向一个有效的内存块,其中有 5 个 int 元素的空间。
函数 malloc。
将动态内存分配给指针是通用函数。它的原型是:void * malloc(size_t nbytes);其中 nbytes 是我们希望分配给指针的字节数。该函数返回一个 void* 类型的指针,为什么我们必须将值类型转换为目标指针的类型,例如:
char * 罗尼;
ronny = (char *) malloc (10);
这会为 ronny 分配一个指向 10 字节的可用块的指针。当我们想要分配除 char 以外的不同类型的数据块(不同于 1 个字节)时,我们必须将所需的元素数量乘以每个元素的大小。幸运的是,我们有操作符 sizeof,它返回具体数据的数据类型的大小。
int * 鲍比;
bobby = (int *) malloc (5 * sizeof(int));
这段代码为 bobby 分配了一个指向 5 个 int 类型整数块的指针,根据编译程序的系统,这个大小可以等于 2、4 或更多字节。
【讨论】:
【参考方案5】:new
具有类型安全性,malloc
没有。
new
调用构造函数,malloc
没有。
delete
调用析构函数,free()
没有。
【讨论】:
以上是关于C语言中“SIZEOF(INT)“是啥意思?有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
请问matlab中的fread(fid,19,'int');和c语言中的fread(fid,sizeof(int),19,ch)有啥区别啊