C语言两个实例解析

来源:本站
导读:目前正在解读《C语言两个实例解析》的相关信息,《C语言两个实例解析》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言两个实例解析》的详细说明。
简介:经验分享,整理两个C语言小问题。

例一:

下面程序输出什么?

int main()    {        int i = 43;        int n = printf("%dn",i);      printf("%dn",n);           return 0;  }   

大家深入考虑一下为什么返回是3这背后有什么鲜为人知的秘密到底是C语言离奇的规定还是深思熟虑后的决定?

相信大家都在学习嵌入式课程 在学习驱动的时候 应该知道有一种字符设备驱动,在linux 中一切东东都是文件 外设也是文件 也就是说显示器也是文件 那么printf的实现其实就是调用显示器的驱动程序往这种外设写入数据 所以我们来考虑一下 显示器属于什么设备呢 字符型设备 所以printf返回的其实不应该是输出的字符个数 准确的说应该是 向字符设备写入的数据的字节数 因为char就占用一个字节 所以碰巧 “printf返回输出字符的个数” 这个说法正确了。

例二:

有两个疑问:

第一个:#define中用到了array,但是array在后面才定义的,合法吗?为什么?

第二个:程序输出什么?

#include <stdio.h>   #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))   int array[] = {23,34,12,17,204,99,16};   int main()   {      int d;      for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)          printf("%dn",array[d+1]);      return 0;   }   

第一个:#define中 用到了array, 但是array在后面才定义的,合法吗?为什么?

其实合法的,在编译之前是预编译,预编译会处理#define之流的东东,在编译时这个define就没了。

第二个:程序输出什么?

程序不会输出任何东西。因为int和unsigned int比较时会被转换为无符号的,因此-1就直接被看成0xFFFFFFFF了,这样d不可能小于条件中的表达式。自然for不会执行。注意一点sizeof是编译的工具,它的计算结果是无符号的。

提醒:《C语言两个实例解析》最后刷新时间 2024-03-14 00:59:29,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言两个实例解析》该内容的真实性请自行鉴别。