关于switch的用法这里不再做什么总结了,其实这个是一个便捷的快速跳转条件切换器。而关于这个功能最常用的技术讨论点在于case后面的break以及default。这里不讨论这些,直接看下面的代码:

#include"stdio.h"

int main(void)

{

int num = 0;

switch(num)

{

printf("functionrun!\n");

}

return 0;

}

上面的代码中用到了一个switch,但是代码块中没有任何case以及default。代码语法有问题吗?

编译一下如下:

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>gcc switch.c

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>

由上面的结果可以看到,编译没有任何问题。那么运行会是什么状态呢?会把这个唯一的printf执行输出相应的语句?

运行如下:

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>a

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>

如此看,就有点诡异了。这个printf语句是没有执行到的!也就是说,switch语句中的代码执行必须得有case标签指示代码的入口。这种行为很让人联想到一种情况的程序执行结果,代码如下:

#include"stdio.h"

int main(void)

{

int num = 0;

switch(num)

{

int i = 123;

printf("functionrun!\n");

default:

printf("value of iis:%d\n",i);

break;

}

return 0;

}

代码是在之前的代码中修改的,代码的第二个printf会执行,可是执行的时候i的数值是多少呢?从之前的测试可以看出,局部变量后面的代码是没有执行过的,那么我这个i在每次函数执行到这里的时候会每次动态性初始化吗?

代码编译运行结果:

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>gcc switch.c

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>a value of i is:2

E:\WorkSpace\02_技术实践\01_编程语言\01_C语言\02_C和指针\switch>

从上面的结果可以得出两个结论:

1,代码块中的声明定义是起作用的;

2,i的数值不是123证明这部分的局部变量并没有进行每次的动态初始化。

说起来这也是够奇怪的一个特点,印象中之前看《C专家编程》的时候似乎看到过一个类似的描述,但是那时候C语言的水平看《C专家编程》一点也看不懂。只是留下了一个模模糊糊的印象,至于是否是一个问题,有空还是得会去查查。

免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除

switch c语言讲解,C语言switch使用之诡异用法详解相关推荐

  1. php循环经典用法,PHP switch嵌套、往复循环、单选等的“高级”用法详解

    php switch用法很多,除了我们常见的switch break的搭配外, 还有其他用法,也许会满足你的特殊需求! switch语句和具有同样表达式的一系列的 IF 语句相似.很多场合下需要把同一 ...

  2. x3用c语言函数表示,C语言中strtod()函数的用法详解

    函数原型: #include double strtod(const char *nptr, char **endptr); C语言及C++中的重要函数. 名称含义 strtod(将字符串转换成浮点数 ...

  3. C语言 rand函数,srand函数 生成随机数用法详解

    与随机数有关的两个函数,srand() 和 rand(),这两个函数都包含"stdlib.h"头文件里 srand()函数是随机数发生器,使得每轮产生的随机数列都不相同.      ...

  4. c语言getline作用,C++ cin.getline及getline()用法详解

    下面先看下C++ cin.getline用法,具体内容如下所示: 使用 C++ 字符数组与使用 string 对象还有另一种不同的方式,就是在处理它们时必须使用不同的函数集.例如,要读取一行输入,必须 ...

  5. c语言 switch case 字符串,c语言switch case用法详解

    c语言switchcase用法详解 switch是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch是多分支选择语句.说得通俗点,多分支就 ...

  6. c语言while将字符循环,C语言 while语句的用法详解

    在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结 ...

  7. php switch case 判断语句,PHP的switch判断语句的“高级”用法详解,switch详解_PHP教程...

    PHP的switch判断语句的"高级"用法详解,switch详解 只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实 ...

  8. PHP使用Switch语句判断星座,PHP的switch判断语句的“高级”用法详解 用switch语句怎样判断成绩的等级...

    php switch case 求具体详解,case里面能加if语句? swich 语句 我非常喜欢用 case里面加if干嘛 . php switch中能加if语句吗 PHP里 switch cas ...

  9. 电大计算机C语言1253,1253《C语言程序设计》电大期末精彩试题及其问题详解

    1253<C语言程序设计>电大期末精彩试题及其问题详解 (34页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实用文档&l ...

最新文章

  1. python运行过程中会被编译成二进制_Python代码在运行过程中,会被编译成二进制代码。_学小易找答案...
  2. python大一知识点_python知识点复习
  3. 命令行避免输入错误文件名_GitHub 60000+ Star 登顶,命令行的艺术
  4. 云上快速搭建Serverless AI实验室
  5. JeeWx捷微 2.4.1版本发布,开源JAVA微信管家平台(支持公众号、企业号)
  6. redis+lua实现分布式限流
  7. PCI总线特性及信号说明
  8. 新年春节海报素材精品,再也不怕老板催稿!
  9. tracepro应用实例详解_十大行业气动设备 120个典型气动系统应用实例
  10. OpenCV 3.0 CvMat and cv::Mat Conversion
  11. keepalived+nginx双机热备+负载均衡
  12. 格签名困难假设: 最短向量问题SVP
  13. Linux系列之Linux安装及源配置(软件源)的介绍
  14. Samba共享服务详解
  15. CnOpenData中国各行业工商注册企业分年份数量统计(含新增,注销企业数量)
  16. ls一1测距仪说明书_生产力小工具 篇一:激光测距靠谱吗?杜克LS-1激光测距仪开箱测评...
  17. LTE终端分类-LTE UE category
  18. 中美加征关税HS码清单列表
  19. 上传file时accept限制文件类型pdf、doc、docx、 jpg、 png、xls 、xlsx等格式
  20. 传统文化群聊摘录(不定时更新)

热门文章

  1. html5简历阅读,HTML5 移动简历模板
  2. 计算机游戏无法运行程序包,一体电脑显示或声音不正常,某些软件或游戏无法正常运行怎么办...
  3. android电容触摸屏的驱动及其上层工作原理,android 电容屏(一):电容屏基本原理篇...
  4. java final const_Java 中的final 和C++ 中的const 有什么区别?
  5. html参考文献_学术规范| 参考文献的格式要求和书写规则
  6. hough变换直线检测_CV学习笔记(十五):直线检测
  7. 计算机模拟专业,2017年数值模拟专业知识题库
  8. linux连接池等待时间,LINUX系统下解决time_wait 连接数过多问题
  9. Java之HSF搭建demo
  10. 在Django将已有数据库生成models文件