标题: 单片机C语言sizeof printf输出问题,没想明白,程序为何直接输出会输出514 [打印本页]

作者: innere    时间: 2022-9-29 17:08
标题: 单片机C语言sizeof printf输出问题,没想明白,程序为何直接输出会输出514
如图,sizeof直接放到printf中,直接变态输出
但定义个值接一下,sizeof又回归正常
网上找到,有个有同样现象的,但是他也没写原因
keil5,51环境,求原因,轻喷

51hei图片_20220929170542.jpg (50.17 KB, 下载次数: 18)

输出如图

输出如图

作者: yzwzfyz    时间: 2022-9-30 08:07
要想真正地了解为什么?学会汇编才行,否则只参看函数的注解,注解不到的,你就……。
打开编译后的汇编程序,逐句分析,一定能找到原因。
作者: pdwdzz    时间: 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里边存着什么,你未初始化,随机!

作者: lkc8210    时间: 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




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


作者: innere    时间: 2022-10-8 23:23
pdwdzz 发表于 2022-9-30 09:56
我来解答你的疑问;
先来说printf("%d",a);这条函数。里边a是什么?是变量。更本质的说是什么?是一个变 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1