C语言中,sizeof返回值代表什么意思?

作者&投稿:闭才 (若有异议请与网页底部的电邮联系)
C语言中,sizeof返回值代表什么意思?~

strlen 计算字符串长度 不包含结束符
sizeof 计算字符串长度,包含结束符

sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。常见的使用方式:

int a=10;
int arr=[1,2,3];
char str[]="hello";
int len_a = sizeof(a);
int len_arr = sizeof(arr);
int len_str = sizeof(str)
printf("len_a=%d,len_arr=%d,len_str=%d
",len_a,len_arr,len_str)
结果是:len_a=4,len_arr=12,len_str=6

扩展资料:
在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位)。
在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
在Pascal 语言与C语言中,对 sizeof() 的处理都是在编译阶段进行。

sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
MSDN上的解释为:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t.


参考资料:
百度百科-sizeof

sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义

这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed char和unsigned char的sizeof值为1,毕竟char是编程能用的最小数据类型。
MSDN上的解释为:
The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a
type (including aggregate types). This keyword returns a value of type size_t.
2. 语法:
sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
所以以下三种sizeof的使用都是对的:
#include <stdio.h>
main()
{
int b;
printf("%d\n",sizeof b);
printf("%d\n",sizeof(b));
printf("%d\n",sizeof(int));
}

4. 基本数据类型的sizeof
这里的基本数据类型指short、int、long、float、double这样的简单内置数据类型,由于它们都是和系统相关的,所以在不同的系统下取值可能不同,这务必引起我们的注意,尽量不要在这方面给自己程序的移植造成麻烦。一般的,在32位编译环境中,sizeof(int)的取值为4。
5. 指针变量的sizeof
等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在将来的64位系统中指针变量的sizeof结果为8。
指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用指向结构体的指针)。
6. 数组的sizeof
数组的sizeof值等于数组所占用的内存字节数,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符串末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)
sizeof当作了求数组元素的个数是不对的,求数组元素的个数有下面两种写法:int c1 = sizeof(a1)/sizeof(char); // 总长度/单个元素的长度
int c2 = sizeof(a1)/sizeof(a1[0]); // 总长度/第一个元素的长度.注意数组名做函数参数传递时退化为指针。
7. 结构体的sizeof
struct S1
{
char c;
int i;
};
sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:S1 s1={ 'a', 0xFFFFFFFF };s1的地址为0x0012FF78,其数据内容如下:
0012FF78: 61 CC CC CC FF FF FF FF中间夹杂了3个字节的CC看看MSDN上的说明:When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.

这就是字节对齐!为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否则
就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数
据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本
数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能
需要加入填充字节,所以整个结构体的sizeof值就增长了。
1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。
那么如果编程中验证这一点呢?
#include<iostream>
using namespace std;
int main()
{
int i=1;
cout<<i<<endl;
sizeof(++i);
cout<<i<<endl;
return 1;
}

输入结果为 1
输出结果仍为 1
sizeof中的++i 的副作用并没有显示出来,原因只可能有一个,在编译的时候sizeof执行以后将++i处理了,++i的副作用因此被消除了。如果sizeof 是在运行时进行的话,则肯定要注意++i 。实际上sizeof的实现应该是用宏来做的,宏在编译时进行执行。具体实现可以参考下面。
2.sizeof('a')在C语言中的结果是2,在C++中结果是1,看过某篇文章说C中sizeof侧重于“数”,而C++中sizeof更侧重于“字符”。
3.文章中讲了两个用宏实现sizeof的经典应用
//适用于非数组
#define _sizeof(T) ((size_t)((T*)0 + 1))
//适用于数组
#define array_sizeof(T) ((size_t)(&T+1)-(size_t)(&T))

先举两个小例子说明两个宏的应用,对于第一个如 _sizeof(int); 的结果就是4;对于第二个先声明一个大小为4的数组int a[4];那么array_sizeof(a)结果为16.

对于非数组的宏定义,先是将0转换为T*类型的指针所指向的地址(此时地址为0)。然后对T类型的地址加1,相当于加上了T类型的大小(即得到了非数组T的大小)。前面的size_t只是将地址转化为int型的整数返回。
一个简单的例子:int* p; p=p+1; --------p是一个int*类型的指针, p+1在地址空间上相当于加上了4个字节。

对于数组的宏定义,类似于非数组的宏定义,为了方便理解,这里可以把数组T看成一个用户自定义的类型,&T表示数组类型的指针,对于数组类型指针加1相当于在地址上加上了该数组大小。由于是用户自定义的类型所以不能强制将0转化为数组类型的地址,只能用加1后的地址减去之前的地址,得到的差值就是数组本身所占的字节大小。

是 一个Int 占4个字节,字节在计算机中就用一个8位2进制表示,这个回答完就升级了 呵呵

是说 int 型变量占4个字节。

sizeof这个函数就是获取变量的长度

代表 int的字节数 不同编译器之不同


c语言中sizeof和scanf有什么区别?
sizeof是c语言保留的关键词不能作为变量名,scanf只是一个库函数名,可以使用在你的代码里局部变量会屏蔽函数代码外的变量。另外c语言变量详细规则如下:变量的命名规范 1、起名要有意义;2、只能以英文字母、下划线( _ )开头。后面可以接数字、英文字母、下划线;3、不能是C语言中的关键字C语言中的...

C语言中“SIZEOF(INT)“是什么意思?有什么作用?
C语言中“SIZEOF(INT)“指的是求括号中的类型,或者变量的大小。比如这里x应该是个int型数组,那么用这个数组的大小,除以int型数据的大小,就得到这个数组的长度。(注:这个数组必须是静态数组)sizeof是计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算...

C++中sizeof(float)是什么意思?
sizeof是C语言的一种单目操作符。一、sizeof的概念,sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法 1、...

C语言中,sizeof运算符有什么作用?
sizeof运算符 该运算符在编译阶段就已经起作用了。它以字节为单位返回其操作数的大小。它的操作数可以是数据对象也可以是一个类型。如果是类型那么操作数需要用圆括号括起来。如:sizeof(int)=4;

c语言中,sizeof是什么意思
sizeof() 是一个获取数据类型或者表达式长度的运算符 例如:sizeof(int)就是获取int型的长度,所以值为4,即int型占4字节内存

在c 语言中sizeof后面是句子怎么用?
c语言中sizeof的用法大概有以下几种:1.返回一个类型的大小,如:sizeof(int),sizeof(int*)。2.返回一个常量的大小,如:sizeof(100),sizeof(1+1.1)。3.返回一个表达式的大小,如:int a=1,arr[]={1,2,3};float b=2.2;sizeof(a*b+1),sizeof(arr)。

sizeof和strlen在c语言的区别
short f();printf("%d\\\\n", sizeof(f()));输出的结果是sizeof(short),即2。2、功能不同 sizeof的功能能是,获得保证,能容纳实现所建立的最大对象的字节大小。strlen的功能是返回字符串的长度,该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一...

C语言中sizeof和strlen函式区别在哪?
C语言中sizeof和strlen函式区别在哪? 一、sizeof sizeof(...)是运算子,在标头档案中typedef为unsigned int,其值在编译时即计算好了,引数可以是阵列、指标、型别、物件、函式等。 它的功能是:获得保证能容纳实现所建立的最大物件的位元组大小。 由于在编译时计算,因此sizeof不能用来...

c语言中sizeof的意思是什么下面这道题的答案是什么,请解释一下
sizeof是指这个数据类型分配的单元内存大小,比如int 是4,等等,所以sizeof(struct date)=4+4+4=12, union类型比较特殊,它的长度大小时内部成员中最大的一个的长度,所以sizeof(m)是其中long的值,也就是8

c语言sizeof和strlen的区别
(2)strlen:做的是一个计数器。2、用法上的区别 (1)sizeof:sizeof( type_name ); \/\/ sizeof(type); 在编译时有效,而不是在运行时有效。(2)strlen:extern unsigned int strlen(char *s); 返回s的长度,不包含终止符NULL。定义 sizeof是C\/C++中的一个操作符(operator),简单的说...

同安区18465067365: c语言中sizeof有什么意义,刚刚在动态链表中看到的! -
中叔洪一扫: sizeof的作用是取得参数在内存中所占大小, 例如 sizeof(char)=1 ,sizeof(int)=4

同安区18465067365: 在C程序中,sizeof是指什么 -
中叔洪一扫: c语言中判断数据类型长度符 用法 sizeof(类型说明符,数组名或表达式); 或 sizeof 变量名

同安区18465067365: C语言里sizeof(char)是什么意思 -
中叔洪一扫: sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位). char是c语言中基本类型,一般char类型占1个字节. sizeof(char)的结果是,1. sizeof:计算数据类型长度 char = 1 int 2, long 4 int a[6]; sizeof (a) 2*6...

同安区18465067365: strlen sizeof 在C语言中是什么意思 -
中叔洪一扫: strlen是求字符串实际长度的意思,例如char *str=“hello world”.则strlen[str]的返回值是11.sizeof是用来求一个变量所占的内存的.例如int a=0.则sizeof(a)的返回值是4 .如果还有什么疑问,可以随时给我发邮件:sword2ya@139.com

同安区18465067365: C语言,sizeof函数测什么,具体用法怎么用 -
中叔洪一扫: sizeof()用来测给定的数据类型在内存中占的字节长度; 比如我想知道int类型变量占几个字节 就这样使用:len = sizeof(int) 就可以了,len就是int型变量在内存中字节数; 当然你也可以这么用 int a; len = sizeof(a); 编译器会知道a是int型变量的,会自动换成sizeof(int); 另外 自己定义的数据类型也可以用sizeof来求字节数,比如定义了一个类class A{...},然后你 这样用:len = sizeof(A),就能知道A占了几个字节; 最后,提示下,sizeof是关键字或者说是运算符,不是函数,它的结果是编译的时候就确定了的,没有函数调用;

同安区18465067365: C语言中,sizeof返回值代表什么意思? -
中叔洪一扫: 是说 int 型变量占4个字节.

同安区18465067365: c语言中sizeof()和strlen()用法上有什么区别呢? -
中叔洪一扫: 1. sizeof是操作符,不是函数.它后面的()并不是必须的,没有歧意时就不必写上了.sizeof操作符计算的是系统为它后面的变量或类型名分配的空间大小,无论其中是否存储了有用数据. 2. strlen()是库函数,()中必须是字符串指针或字...

同安区18465067365: c语言个的sizeof是什么意思?
中叔洪一扫: 测试 一个数组 或者是 字符串 所占空间的 大小的 sizeof的返回值 是 unsigned int 型 !

同安区18465067365: c语言中sizeof什么意思 -
中叔洪一扫: sizeof 不是函数名,而是运算符.计算 变量类型,或某一变量占内存 大小 的字节数. 例如 int 型,double 型,struct 型,简单变量名,数组名 : #include <stdio.h> struct AA{ char name[80]; int v[10]; double d[2]; }; int main(){ int i = 102; double v=...

同安区18465067365: C语言中,sizeof运算符有什么作用? -
中叔洪一扫: sizeof运算符 该运算符在编译阶段就已经起作用了.它以字节为单位返回其操作数的大小.它的操作数可以是数据对象也可以是一个类型.如果是类型那么操作数需要用圆括号括起来. 如:sizeof(int)=4; 扩展资料: C语言其他运算符: 1、...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网