C语言迷惑行为有哪些
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍"C语言迷惑行为有哪些",在日常操作中,相信很多人在C语言迷惑行为有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言迷惑行为有哪些"的疑惑有所帮
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
机房网络安全的设备有哪些
网络安全成果大赛西安
阿里云免费服务器操作教程
军团要塞2服务器出现英文
国家计算机二级考试网络技术
csgo的服务器有什么用
企业网络安全实施细则
网信普法网络安全法
正规软件开发要求
常见数据库的特点有哪些
巨杉数据库java开发
制造型公司管理软件开发
宁波商城软件开发
网络安全手抄报 中学生
江西省青少年网络安全颁奖典礼
四川前端软件开发怎么样
快手发语音提示服务器繁忙
网络安全训练营教学视频
望远县办公软件开发
西部数码数据库登录
服务器管理器提示tcpip警告
共享网络安全的名言名句
常州软件开发产业化
显示无法连到服务器咋办
网络安全存在教学中的案例
医学数据库发表文章
优火网络技术
东西湖哪里有软件开发团队
零基础怎样学软件开发
网络安全法维护了