找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 4
收起左侧

单片机C语言sizeof printf输出问题,没想明白,程序为何直接输出会输出514

[复制链接]
ID:911455 发表于 2022-9-29 17:08 | 显示全部楼层 |阅读模式
如图,sizeof直接放到printf中,直接变态输出
但定义个值接一下,sizeof又回归正常
网上找到,有个有同样现象的,但是他也没写原因
keil5,51环境,求原因,轻喷

输出如图

输出如图
回复

使用道具 举报

ID:123289 发表于 2022-9-30 08:07 | 显示全部楼层
要想真正地了解为什么?学会汇编才行,否则只参看函数的注解,注解不到的,你就……。
打开编译后的汇编程序,逐句分析,一定能找到原因。
回复

使用道具 举报

ID:146878 发表于 2022-9-30 09:56 | 显示全部楼层
我来解答你的疑问;
先来说printf("%d",a);这条函数。里边a是什么?是变量。更本质的说是什么?是一个变量的名称。更更本质的是什么?是一个地址。函数中一切对a的操作,本质都是去操作a所在的地址。假设a的地址是0x00;那printf("%d",a);和printf("%d",0x00);没什么两样。
然后再来说sizeof();他不是函数,只是一个预处理。出来的本质是一个常亮。如上你是sizeof(k),就是常量2。那printf("%d",sizeof(k));就是printf("%d",2);即把2这个地址里的数据输出,地址2里边存着什么,你未初始化,随机!
回复

使用道具 举报

ID:161164 发表于 2022-9-30 22:10 | 显示全部楼层
sizeof():关于sizeof()的介绍网上有很多详细的资料,
这是一个操作符,所以使用时不必添加头文件。
可以对数值和类型进行操作,返回的值是size_t类型。
size_t类型在C51编译器的stddef.h中如是定义:
#ifndef _SIZE_T
  #define _SIZE_T
  typedef unsigned int size_t;
#endif

2022-09-30_215443.png


试改为printf("%u\n",sizeof(k));

回复

使用道具 举报

ID:911455 发表于 2022-10-8 23:23 | 显示全部楼层
pdwdzz 发表于 2022-9-30 09:56
我来解答你的疑问;
先来说printf("%d",a);这条函数。里边a是什么?是变量。更本质的说是什么?是一个变 ...

好像懂了,感谢,如楼上,要去补汇编了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表