C51程序设计中的sizeof详细解析

发布者:tgdddt最新更新时间:2018-01-03 来源: eefocus关键字:C51  程序设计  sizeof 手机看文章 扫描二维码
随时随地手机看文章

一、sizeof的概念

  sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 

二、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的结果

  sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

    1、若操作数具有类型char、unsigned char或signed char,其结果等于1。    ANSI C正式规定字符类型为1字节。

    2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依靠于实现,一般可能分别为2、2、2、2、4、4、4、8、10。

    3、当操作数是指针时,sizeof依靠于编译器。例如MICroSOFt C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。

    4、当操作数具有数组类型时,其结果是数组的总字节数。

    5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。    让我们看如下结构:    strUCt {char b; double x;} a;    在某些机器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。    这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。

    6、假如操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。  四、sizeof与其他操作符的关系  sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。 

五、sizeof的主要用途

  1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:    void *malLOC(size_t size),    size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。 

  2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:    void * MEMSet(void * s,int c,sizeof(s))。 

六、建议  由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用sizeof来代替常量计算。


关键字:C51  程序设计  sizeof 引用地址:C51程序设计中的sizeof详细解析

上一篇:C51程序设计中的编程中的字节对齐问题
下一篇:C51程序设计嵌套设计

推荐阅读最新更新时间:2024-03-16 15:51

C51独立键盘按键检测示例
独立按键检测很简单.就是检测单片机的i/o口哪个是低电平然后就能判断是哪个键被按下了.当然还要去抖动,也就是要延时.不然会有很多误动作. 效果图: 电路图: 说下程序实现的功能: SW16是数码管+1 SW17是数码管-1 SW18是数码管清零 SW19是数码管自动+1 源代码 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; sbit key4=P3^5; sbit P20=P2^0; sbit P21=P
[单片机]
<font color='red'>C51</font>独立键盘按键检测示例
PIC单片机的多路AD切换程序设计
pic单片机是最重要的单片机种类之一,对于pic单片机,小编曾带来诸多介绍,如pic单片机的优势、pic单片机选型等。而在本文中,小编将为大家介绍两种pic单片机程序:一是pic单片机多路ad切换程序,二是pic单片机循环程序。 一、pic单片机简介 pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。PIC 单片机是一个小的计算机。PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于PIC的类型
[单片机]
PIC单片机的多路AD切换<font color='red'>程序设计</font>
单片机直流电机PWM(调速)控制系统仿真+程序设计
1 引言 早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。随着计算机控制技术的发展,微处理器已经广泛使用于直流传动系统,实现了全数字化控制。由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。所以,全数字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。所以,直流传动控制采用微处理器实现全数字化,使直流调速系统进入一个崭新的阶段。 微处理器诞生于上个世纪七十年代,随着集成电路大规模及超大规模集成电路制造工艺的迅速发展,微处理器的性价比越来越高。此外,由于电力电子技术的发展,制作工艺的提升,使得大功率电
[单片机]
单片机直流电机PWM(调速)控制系统仿真+<font color='red'>程序设计</font>
C51 中断服务程序的写法
格式:void 函数名()interrupt 中断号 using 工作组 {    中断服务程序内容 }   注意:中断不能返回任何值,所以前面是 void 后面是函数名,名字可以自己起,但不要与c语言的关键字相同;中断函数不带任何参数,所以 函数名后面的 () 内是 空的,中断号是指单片机的几个中断源的序号。这个序号是单片机识别不同中断的唯一标志。所以一定要写正确。   后面的using 工作组 是指这个这个中断使用单片机内存中 4 个工作寄存器的哪一组, c51 编译后会自动分配工作组,因此最后这句话我们通常省略不写。 c51 中断写法实例   void T1-time() interrupt 3 {   TH1=(65536
[单片机]
C51单片机对共阳极数码管的控制设计
这是共阳极数码管的电路图,其中JP3接到P0口,JP3的8-1对应数码管的a-dp引脚。 共阳极数码管的编码表如下,注意a---最低位,dp---最高位: 【0---3】0xco,0xf9,0xa4,0xb0, 【4---7】0x99,0x92,0x82,0xf8, 【8---B】0x80,0x90,0x88,0x83, 【C---F】0xc6,0xa1,0x86,0x8e。 C51程序显示数字0-9: #include #define uchar unsigned char void delay(); uchar smg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
[单片机]
<font color='red'>C51</font>单片机对共阳极数码管的控制设计
C51串口中断接收和发送程序
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断 #include reg51.h #include string.h #define INBUF_LEN 4 //数据长度 unsigned char inbuf1 ; unsigned char checksum,count3; bit read_flag=0; void init_serialcomm( void ) { SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |=
[单片机]
基于C51的RS232基本通信程序
由于即将用到C#与单片机的通信程序,我回头使用了STC12系列的单片机,暂时停止AVR。因为AVR的编程器不属于RS232接口通信,弄起来麻烦。为了兼容性,我把程序的名称定义为和AVR里的名称一样,而且使用回调方式,让应用程序能够知道单片机现在发生了什么。编译器:Keil 程序如下: /*********** 函数说明 ******************** 本程序由discovery编写,基于8位UART通信 本程序占用TIMER1,并且占用using2寄存器组 使用本函数建议其它程序不要使用TIMER1 需要在系统里指定UART中断回调处理函数 void initUSART( // 初始化UART
[单片机]
80C196单片机鼠标接口程序设计实例
摘要:通过对鼠标底层通信原理及协议的深入分析,探讨了鼠标在80C196单片机系统中的应用价值与可行性,并介绍了鼠标接口软件设计的原理及方法,给出了80C196单片机与Microsoft鼠标的具体接口程序。 关键词:鼠标 接口技术 软件设计 接口程序 80C196单片机由于低格低、处理能力强,在信号分析、数据采集等很多领域得到了广泛应用,在目标系统中使用各种规格的液晶或CRT显示器也越来越多。因此在这样的单片机系统中引入鼠标,将会方便操作,提高工作效率。鼠标内核本质上是一个二维的角度或位移信号检测装置,耗电极少、可靠性高、价格低廉,可能在许多场合发挥作用。鼠标与主机之间通过RS-232标准串行接口进行通信,信息传送是单方向、无条
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved