C语言迷惑行为有哪些
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要介绍"C语言迷惑行为有哪些",在日常操作中,相信很多人在C语言迷惑行为有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言迷惑行为有哪些"的疑惑有所帮
千家信息网最后更新 2025年11月14日C语言迷惑行为有哪些
这篇文章主要介绍"C语言迷惑行为有哪些",在日常操作中,相信很多人在C语言迷惑行为有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言迷惑行为有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
代码0:
#includeint main(void) { int c = 5; switch(c) { case 0 ... 10: printf("0-->10\n"); break; case 11 ... 20: printf("11-->20\n"); break; default: printf("other\n"); } return 0; }
输出结果:
0-->10
以上特性被常见编译器支持,但是标准中并未提到。
代码1
#includeint main(void) { printf("%m\n"); return 0; }
输出结果:
Success
等价于:
printf("%s\n",stderr(errno));由于你的代码前面并没有执行出错设置errno,因此errno会是0,而对应的描述信息就是Success。
代码2
#includeint main(void) { int i = 10; printf("%zu\n",sizeof(i++)); printf("%zu\n",sizeof(++i)); printf("%d\n",i); return 0; }
输出结果:
4 4 10
sizeof实际作用的对象是类型。sizeof中的表达式本身并不会被执行。
代码3
#include#include int main(void) { while(1) { fprintf(stdout,"公众号"); fprintf(stderr,"编程珠玑"); sleep(10); } return 0; }
输出结果:
编程珠玑编程珠玑编程珠玑
为什么不会输出公众号呢?原因在于标准输入默认是行缓冲,而标准错误是无缓冲。这在《那些奇奇怪怪的缓冲问题》中已经有解释了。
代码4
#includeint main(void) { int a = 10; switch(a) { int b = 20; case 10: printf("%d\n",a + b); break; default: printf("%d\n",a + b); break; } return 0; }
输出结果:
10
switch中的int b = 20,并不会被执行,你编译时就会发现有警告。
代码4
#includeint main(void) { printf("%c\n",4["hello 公众号编程珠玑"]); return 0; }
输出结果:
o
等价于:
char *str = "hello 公众号编程珠玑"; printf("%c\n",str[4]);代码5
//来源:公众号编程珠玑 //https://www.yanbinghu.com #includeint main(void) { char arr[] = {'h','e','l','l','o'}; printf("%s\n",arr);//灾难!,可能会崩溃 return 0; }
代码6
没啥用,还会core dump的超短代码,可以编译运行:
main=0;
代码7
#includeint main(void) { int arr[] = {5,4,3,2,1}; for(int i = -1; i < sizeof(arr)/sizeof(int) - 1; i++) { printf("%d\n",arr[i+1]); } printf("end\n"); return 0; }
输出结果:
end
原因也很简单,sizeof(arr)/sizeof(int)的结果是unsigend, int类型的i 和unsigned比较,被转换为一个很大的unsigned数,所以for循环的条件不满足。
代码8
#includetest() { long b = 12345678987654321; return b; } int main(void) { long a = test(); printf("%ld\n",a); return 0; }
输出结果:
1653732529
代码9
#includeint main(void) { float a = 3; int b = 2; printf("%d\n",a/2); return 0; }
输出结果:
1199094392
原因:浮点数在计算机中按照IEEE754标准存储
到此,关于"C语言迷惑行为有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
代码
结果
输出
珠玑
编程
公众
行为
语言
标准
学习
原因
缓冲
编译
更多
等价
类型
问题
帮助
实用
很大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机三级网络技术框架
数据库中批量删除记录
加强网络安全技能培训
爱上科技互联网
怎么复制他人的数据库
关于网络安全课前演讲
请输入正确的数据库连接参数
应急管理 数据库 价值
夏立军网络安全
网络安全专业培训课程
_网络技术操作题
导航上面服务器包的标志是什么
付队长软件开发裙
计算机三级考试网络技术编号
雷石柏云linux视频服务器
数据库查询不小于
联合电子软件开发
苏州合同管理软件开发平台
组织部 网络安全职责
大同口碑好的网络安全质量服务
点位图维修软件开发
香港服务器供应商
报税时保存数据到电子数据库异常
宁波制造软件开发要求
中学生网络安全我会做到
东风电脑服务器回收价格表
数据库安全性dac与mac
sql2016数据库怎么创建库
飞书的数据库是怎么设计的
网络安全法 物联网