- 相干保举
C说话中sizeof的用法
C说话的利用规模普遍,具有很强的数据处置才能,不只仅是在软件开辟上,并且各类科研都须要用到C说话,适于编写体系软件,三维,二维图形和动画,详细利用比方单片机和嵌入式体系开辟。以下是小编为大师搜刮清算的C说话中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
main()
{
int b;
printf("%dn",sizeof 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 ); // 成果为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 ed for alignment.
这便是字节对齐!为甚么须要字节对齐计较机构成道理教诲咱们如许有助于加速计较机的取数速率,不然
就良多花指令周期了。为此,编译器默许会对布局体停止处置(现实上别的处所的数
据变量也是如斯),让宽度为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
1
sizeof 中的++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说话中sizeof的用法】相干文章:
C说话中strpbr()函数的用法07-25
c说话中time函数的用法08-27
C说话中volatile的寄义08-14
C 说话中宏的利用08-02
C说话中的链接编写05-26
html说话中URL的用法06-20
php说话中session用法07-02
C说话中指针的观点03-16
c说话中逻辑或怎样用07-05