C语言中sizeof的用法

printf("%dn", sizeof(f()));

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

sizeof在c语言中是什么意思_sizeof在c语言中的用法sizeof在c语言中是什么意思_sizeof在c语言中的用法


sizeof在c语言中是什么意思_sizeof在c语言中的用法


这是一个依赖于编译系统的值,一般定义为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 ariable 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的使用都是对的

代码C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 代码如下:

#include

main()

{int b;

printf("%dn",sizeof b);

printf("%dn",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 ); // 结果为34=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

这就是字节对齐!为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否则

就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数

据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的`地址上,让宽度为4的基本

数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能

需要加入填充字节,所以整个结构体的sizeof值就增长了。

1、sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。

那么如果编程中验证这一点呢?

代码 代码如下:

#include

using namespace std;

int main()

{int i=1;

cout<

sizeof(++i);

cout<

return 1;

}输入结果为 1

1sizeof 中的++i 的副作用并没有显示出来,原因只可能有一个,在编译的时候sizeof执行以后将++i 处理了,++i 的副作用因此被消除了。如果sizeof 是在运行时进行的话,则肯定要注意++i 。实际上sizeof的实现应该是用宏来做的,宏在编译时进行执行。具体实现可以参考下面。

2、sizeof('a')在C语言中的结果是4,在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后的地址减去之前的地址,得到的值就是数 组本身所占的字节大小。

拓展阅读:C语言变量理解

一、变量的概念

程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务。那么数据是怎么加入到计算机的内存中呢?计算机最初的功能就是能够存储数据并处理数据的机器。那么数据是怎么加入到计算机的内存中呢?在学习程序设计之前,很多学生对计算机的硬件设施都大概已经很熟悉了。计算机的硬件设施中有一个区域是用来存储数据的,计算机在工作的过程中会频繁的从这个区域读入和读出数据。要想让计算机按照某些指令(程序)自动工作,首先必须把数据存储到计算机的存储空间中。在某种计算机语言中实现这种数据存储功能的就是变量。变量就是计算机内存中的某一个存储单元。

二、变量的定义

C语言中变量在使用之前必须先对其进行定义,变量的定义的一般形式如下:【存储类别】数据类型变量名;其中存储类别是可以省略的。

1、存储类别计算机的内存一般分为三个部分:1)程序区;2)静态存储区;3)动态存储区;为了高效的发挥计算机的功能,不同类型的变量存放在不同的内存区域。变量的存储类别决定了变量中的数据在计算机内存中的存储位置。C语言中局部变量存放在动态存储区,全局变量或者静态变量存放在静态存储区。

2、数据类型在用程序处理问题之前,首先必须确定用何种方式描述问题中所涉及到的数据。这个问题在C语言中是由数据类型来决定的。变量的本质表现为在计算机中的存在时间和存储空间。变量的数据类型是用来决定变量在计算机中占用内存空间的大小。比如:整型数据在TC编译系统中占用两个字节的存储空间。C语言变量的类型不仅确定了数据在计算机内存中的存储区域的大小,同时确定了该数据能够参与的各种运算。任何一个C语言的变量必须有确定的数据类型,不管这个变量如何变化,变量的值都必须符合该变量数据类型的规定。

3、变量的名字通过以上介绍我们知道C语言中的变量就是计算机的某个存储单元,设你给某个变量赋予了一个数值,对变量的处理其实就是对这个数据的处理。那么计算机是如何快速准确的找到这个数据呢?计算机的内存是以字节为单位进行划分的。每个存储单元都有自己的地址编号,就向宾馆中房间的房间号一样。计算机就是通过地址来准确的确定数据的存储位置。但是对于程序员特别是非专业计算机人士,如果用计算机内存地址记录数据是非常难作的。

为了更好的掌控变量,C语言规定可以给每个变量其一个容易识别的名字。这个名字的命名规则遵循C语言的标识符命名规则。C语言的变量名的命名在遵循C语言标识符规则的前提下,原则上可以是任意长度字符的组合。但是目前很多的C语言编译系统只能识别前31个字符,如果两个变量的前31个字符相同,则编译系统会认为这两个变量时同一个变量。为了避免这种混淆的出现避免使用多余31个字符的变量名。变量的理解变量就是计算机中的某个存储单元。定义某个变量本质上就是向计算机申请一些存储区域。这个存储区域的大小由变量的数据类型决定,这个存储区域的位置有变量的存储类类别决定。给变量赋予某个数值,其实就是向该变量对应的存储单元读入数据,对变量的处理就是对这个存储单元中的数据的处理。并且这个存储单元中的数据在程序的运行期间是可以发生变化的。

C语言中 。定义a[100],求sizeof(a[100]),以及sizeof(&a)和sizeof(&a[0]),各自代表什么意思,等于几

printf("%d",sizeof(int));等价于int a;printf("%d",sizeof(a));

sizeof(a[100]):取决于a的类型。比如char的话为1等等。

sizeof(&a[0]):由于是地址,为4

我这个是vc6输出的结果 char类型为

sizeof(a[100])=1,

sizeof(&a)=116 400,

sizeof(&a[0])=4,

Press any key to continue

int类型为

sizeof(a[100])=4,

sizeof(&a)=400,

sizeof(&a[0])=4,

Press any key to continue

c语言里:sizeof怎样用法?

sizeof(int)p表示什么意思?

sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“

辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。

但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不

适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,

那么这篇文章对你或许有所帮助。

菜鸟我对C++的掌握尚未深入,其中不乏错误,欢迎各位指正啊

1double. 定义:

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.

其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一

般定义为

typedef unsigned int size_t;

世上编译器林林总总,但作为一个规范,它们都会保证char、signed char和unsigned

char的sizeof值为1,毕竟char是我们编程能用的最小数据类型。

2. 语法:

sizeof有三种语法形式,如下:

1) sizeof( object ); // sizeof( 对象 );

2) sizeof( type_name ); // sizeof( 类型 );

3) sizeof object; // sizeof 对象;

所以,

int i;

sizeof( i ); // ok

sizeof i; // ok

sizeof( int ); // ok

sizeof int; // error

既然写法3可以用写法1代替,为求形式统一以及减少我们大脑的负担,第3种写法,忘

掉它吧!

实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的

不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以

对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式

进行计算。如:

sizeof( 2 );// 2的类型为int,所以等价于 sizeof( int );

sizeof( 2 + 3.14 ); // 3.14的类型为double,2也会被提升成double类型,所以等价

sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用

,我们来看一个完整的例子:

char foo()

{printf("foo() has been called.n");

return 'a';

}int main()

{size_t sz = sizeof( foo() ); // foo() 的返回值类型为char,所以sz = sizeof(

char ),foo()并不会被调用

printf("sizeof( foo() ) = %dn", sz);

}C99标准规定,函数、不能确定类型的表达式以及位域(bit-field

c语言程序里sizeof是什么意思

sizeof

是关键字不是函数,其实就算不知道它是否为32

个关键字之一时,我们也可以借助编译器确定它的身份。看下面的例子:记住:sizeof

在计算变量所占空间大小时,括号可以省略,而计算类型(

模子)大小时不能省略。一般情况下,咱也别偷这个懒,乖乖的写上括号,继续装作一个“函数”,做一个“披着函数皮的关键字”。做我的关键字,让人家认为是函数去吧。

留几个问题(讲解指针与数组时会详细Char讲解)

,32位系统下:

p

=NULL;

sizeof(p)

的值是多少?

sizeof(p)呢

nt

a[100];

sizeof

(a)

的值是多少?

sizeof(a[100])

呢?//

请尤其注意本例。

sizeof(&a)呢?

sizeof(&a[0])

呢?

b[100];

void

fun(int

b[100])

{sizeof(b);//

sizeof

strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到0为止之前(b)

的值是多少?

sizeof( int)是什么意思?

sizeof(&a):由于是地址,为4

C语言中“SIZEOF(INT)“指的是求括号中的类型,或者变量的大小。

比如这里x应该是个int型数组,那么用这个数组的大小,除以int型数据的大小,就得到这个数组的长度。(注:这个数组必须是静态数组)

sizeof是计算数据(包括数组、float变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"0"的大小)。

在32位的系统中,sizeof(int)的值为4。

如果x是int型的数组,则sizeof(x)/sizeof(int)代表x的位数。

探究的一般过程是从发现问题、提出问题开始的,发现问题后,根据自己已有的知识和生活经验对问题的作出设.设计探究的方案,包括选择材料、设计方法步骤等.按照探究方案进行探究,得到结果,再分析所得的结果与设是否相符,从而得出结论.并不是所有的问题都一次探究得到正确的结论.有时,由于探究的方法不够完善,也可能得出错误的结论.因此,在得出结论后,还需要对整个探究过程进行反思.探究实验的一般方法步骤:提出问题、做出设、制定、实施、得出结论、表达和交流.

科学探究常用的方法有观察法、实验法、调查法和资料分析法等.

观察是科学探究的一种基本方法.科学观察可以直接用肉眼,也可以借助放大镜、显微镜等仪器,或利用照相机、录像机、等工具,有时还需要测量.科学的观察要有明确的目的;观察时要全面、细致、实事求是,并及时记录下来;要有、要耐心;要积极思考,及时记录;要交流看法、进行讨论.实验方案的设计要紧紧围绕提出的问题和设来进行.在研究一种条件对研究对象的影响时,所进行的除了这种条件不同外,其它条件都相同的实验,叫做对照实验.一般步骤:发现并提出问题;收集与问题相关的信息;作出设;设计实验方案;实施实验并记录;分析实验现象;得出结论.调查是科学探究的常用方法之一.调查时首先要明确调查目的和调查对象,制订合理的调查方案.调查过程中有时因为调查的范围很大,就要选取一部分调查对象作为样本.调查过程中要如实记录.对调查的结果要进行整理和分析,有时要用数学方法进行统计.收集和分析资料也是科学探究的常用方法之一.收集资料的途径有多种.去图书管查阅书刊报纸,拜访有关人士,上网收索.其中资料的形式包括文字、、数据以及音像资料等.对获得的资料要进行整理和分析,从中寻找和探究线索.

C语言sizeof函数如何使用?

sizeof(m)=4(a占4字节,b占4字节,c占1字节,所以联合m是它们成员占用的字节数,即4字节)

int i = sizeof(char);

printf("%d",i);

上边的程序你就可以求出char类型所占的字节数

当参数为数组时, 实际传参会按指针处理.

即 这里的int arr[10]等效于int arr

sizeof(arr)也就是sizeof(int )

对于32位系统, sizeof(int)=4

如果求int 型如下:

#include "stdio.h"

main()

{printf("sizeof(int)=%d",sizeof(int));

}如果求其他类型只需将int 转换为相应的类型 就行了

sizeof(类型名/变量名);

偏移量必须为sizeof(char)即1的倍数

偏移量必须为sizeof(int)即4的倍数

偏移量必须为sizeof(float)即4的倍数

偏移量必须为sizeof(double)即8的倍数

Sho用就是返回一个对象或者类型所占的内存字节数。rt

偏移量必须为sizeof(short)即2的倍数。

按说是22,24是吗?

取变量的长度(内存中所占长度),以便开辟内存区域

C语言中“SIZEOF(INT)“是什么意思?有什么作用?

结果是 4 3 3 2

sizeof(int)

计算参数的长度,单位为字节。

在16位系统上,如dos、tc,Sizeof(int)=2;

在32系统上,=4.

", sizeof(short));在数据处加入它,是为了保持数据的完整性和兼容型

例如:fwrtie()中的len就需要sizeof,以保证在不同的系统中保持数据的一致性。

获得一个int型变量在内存中占的空间,一般在molloc函数中使用,告诉molloc函数你要申请分配的空间有多大

C++中sizeof(float)是什么意思?

进入函数后用memcpy拷贝出来,长度由另一个形参传进去

一个整形表达式。

结果是一个字符指针所占的字节数。

sizeof的使用方法

1、用于数据类型

sizeof使用形式:sizeof(type)

数据类型必须用括号括住。如sizeof(int)。

2、用于变量

sizeof使用形式:sizeof(var_name)或sizeofvar_name

变量名可以不用括号括住。如sizeof(var_name),sizeofvar_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。

malloc(sizeof)是什么意思?

sizeof(ss) 结果 1 ===》ss是个字符

malloc(sizeof)是C语言,是向系统申请内存空间的函数。

fun(char [8])

sizeof一般用于获取字符串的长度,是处理字符串的重要工具。

同时,sizeof在数据结构这门课中是创建结点必要的命令。

例:head=(node)malloc(sizeof(node)); [注]node为结构体。

sizeof(node)表示获取node类型的长度,malloc(sizeof(node))表示在内存中申请一个node长度的空间。

关于C语言:

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。

C语言中sizeof运算符有什么用?

int b=sizeof(str); //而b=20;

在 C 语言中,可以使用 sizeof 运算符来计算不同数据类型所占用的空间大小。sizeof 运算符的语法格式如下:

sizeof(type)

其中,type 是数据类型,可以是 int、char、float、double、struct、union 等等。

下面是常见数据类型在 64 位系统中取长度的所占用的空间大小:

char:1 字节

short:2 字节

int:4 字节

long:8 字节

long long:8 字节

float:4 字节

double:8 字节

long double:16 字节

可以通过下面的代码来查看各种数据类型在你的机器上所占用的空间大小:

#include

int main() {

printf("sizeof(char) = %lu

", sizeof(char));

printf("sizeof(short) = %lu

printf("sizeof(int) = %lu

", sizeof(int));

printf("sizeof(long) = %lu

", sizeof(long));

printf("sizeof(long long) = %lu

", sizeof(long long));

printf("sizeof(float) = %lu

", sizeof(float));

printf("sizeof(double) = %lu

", sizeof(double));

printf("sizeof(long double) = %lu

", sizeof(long double));

return 0;

}注意,sizeof 运算符返回的是一个 size_t 类型的无符号整数,它表示数据类型所占用的字节数。

c语言sizeof函数

int ss[100] = "0123456789";

在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。

%d就行了 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.能放下就行