新书推荐:3.1 数据类型的知识

本节必须掌握的知识点:

   示例六源代码

   代码分析

   汇编解析

3.1.1 示例六

在数学中数字有一定的特征,比如整数、小数、负数等。在C语言中对数据也有一定的特征,我们称为数据的类型。

数据类型确定了变量的取值范围,所占的内存空间大小。我们可以结合两个问题去学习数据类型,第一个能存储多少数据;第二个存储什么格式的数据。如何知道不同的数据类型能存储几个字节呢? 比如示例代码六中使用的是int 类型的整型变量,能存储4个字节32位有符号整数。       

示例代码六

/*

   sizeof取数据类型字节数

*/

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

    int i = 0;  //声明int类型变量

    printf("int 存储大小 : %u \n", sizeof(i));//sizeof取数据类型字节数

    system("pause");

    return 0;

}

●输出结果:

int 存储大小 : 4

请按任意键继续. . .

3.1.2 代码分析

示列代码六中,sizeof在C语言中是判断数据长度符的关键字,用于检测数据类型长度。

sizeof的语法

●sizeof( type_name );         // sizeof( 类型 );用于数据类型

●sizeof( object);                 // sizeof( object );用于对象

●sizeof object;                   // sizeof 对象;用于对象

printf函数的第一个参数中使用了’%u’格式说明符,表明输出unsigned int类型的格式数据,即sizeof运算符取的数值为unsigned int类型数据(无符号整数),均为正整数。

3.1.3 汇编解析

    ■汇编代码

    ;C标准库头文件和导入库

include vcIO.inc

.data   ;全局区

i   sdword 0    ;全局变量

.const  ;常量区

szMsg db "int 存储大小 : %u ",0dh,0ah,0

.code   ;代码区

start:

    mov eax,sizeof i

    push eax

    push offset szMsg   ;格式化常量字符串偏移地址入栈

    call printf         ;调用printf函数输出结果

    ;  

    invoke _getch   ;等待输入单个字符

    ret             ;结束返回

end start

    ●输出结果:int 存储大小 : 4

    由上述汇编代码可知,C语言中的sizeof关键字直接取自汇编语言的操作符sizeof,功能相同,语法稍有不同而已。

    ■反汇编代码

int i = 0;  //声明int类型变量

009A1838  mov dword ptr [i],0 

printf("int 存储大小 : %u \n", sizeof(i));//sizeof取数据类型字节数

009A183F  push 4 

009A1841  push offset string "int \xb4\xe6\xb4\xa2\xb4\xf3\xd0\xa1 : %u \n" (09A7B30h) 

009A1846  call _printf (09A104Bh) 

009A184B  add esp,8

由反汇编可知,sizeof(i)的值是由编译计算的,没有对应的汇编指令,直接将结果4 push 入栈。

本文摘自编程达人系列教材《汇编的角度——C语言》。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值