本文主要介绍“C语言中有哪些令人困惑的行为”。在日常操作中,相信很多人对于C语言中有哪些让人困惑的行为有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“C语言中有哪些迷惑行为”的疑惑!接下来,请和边肖一起学习!
代码0:
# includes dio . hint main(void){ intc=5;开关(c){案例0.10: printf(' 0-10 \ n ');打破;案例11.20: printf(' 11-20 \ n ');打破;default : printf(' other \ n ');} return0}输出结果:
普通编译器支持0-10以上的特性,但标准中没有提及。
代码1
# includes dio . hint main(void){ printf(' % m \ n ');返回0;}输出结果:
成功相当于:
printf('%s\n ',stderr(errno));错误设置errno不会在你的代码前面执行,所以errno会是0,对应的描述信息是Success。
代码2
# includes dio . hint main(void){ inti=10;printf('%zu\n ',sizeof(I));printf('%zu\n ',sizeof(I));printf('%d\n ',I);返回0;}输出结果:
4410sizeof的实际对象是类型。sizeof中的表达式本身不会被执行。
代码3
# includes dio . h # includes istd . hint main(void){ while(1){ FP
rintf(stdout,"公众号"); fprintf(stderr,"编程珠玑"); sleep(10); } return 0; }
输出结果:
编程珠玑编程珠玑编程珠玑
为什么不会输出公众号呢?原因在于标准输入默认是行缓冲,而标准错误是无缓冲。这在《那些奇奇怪怪的缓冲问题》中已经有解释了。
代码4
#include <stdio.h> int 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
#include <stdio.h> int main(void) { printf("%c\n",4["hello 公众号编程珠玑"]); return 0; }
输出结果:
o
等价于:
char *str = "hello 公众号编程珠玑"; printf("%c\n",str[4]);
代码5
//来源:公众号编程珠玑 //https://www.yanbinghu.com #include<stdio.h> int main(void) { char arr[] = {'h','e','l','l','o'}; printf("%s\n",arr);//灾难!,可能会崩溃 return 0; }
代码6
没啥用,还会core dump的超短代码,可以编译运行:
main=0;
代码7
#include<stdio.h> int 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
#include<stdio.h> test() { long b = 12345678987654321; return b; } int main(void) { long a = test(); printf("%ld\n",a); return 0; }
输出结果:
1653732529
代码9
#include<stdio.h> int main(void) { float a = 3; int b = 2; printf("%d\n",a/2); return 0; }
输出结果:
1199094392
原因:浮点数在计算机中按照IEEE754标准存储
到此,关于“C语言迷惑行为有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/62645.html