C语言switch方法运用实例,C语言switch使用之诡异用法详解

C语言switch方法运用实例,C语言switch使用之诡异用法详解关于 switch 的用法这里不再做什么总结了 其实这个是一个便捷的快速跳转条件切换器 而关于这个功能最常用的技术讨论点在于 case 后面的 break 以及 default 这里不讨论这些 直接看下面的代码 include stdio h intmain void intnum 0 switch num printf functionrun return0 上面的代码中用到了一个

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

#include”stdio.h”

int main(void)

{

int num = 0;

switch(num)

{

printf(“functionrun!

“);

}

return 0;

}

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

编译一下如下:

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

E:WorkSpace 2_技术实践 1_编程语言 1_C语言 2_C和指针switch>

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

运行如下:

E:WorkSpace 2_技术实践 1_编程语言 1_C语言 2_C和指针switch>a

E:WorkSpace 2_技术实践 1_编程语言 1_C语言 2_C和指针switch>

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

#include”stdio.h”

int main(void)

{

int num = 0;

switch(num)

{

int i = 123;

printf(“functionrun!

“);

default:

printf(“value of iis:%d

“,i);

break;

}

return 0;

}

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

代码编译运行结果:

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

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

E:WorkSpace 2_技术实践 1_编程语言 1_C语言 2_C和指针switch>

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

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

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

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

以上这篇C语言switch使用之诡异用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175866.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:14
下一篇 2026年3月26日 下午11:14


相关推荐

  • IIS防盗链:ISAPI Rewrite图片防盗链规则写法

    IIS防盗链:ISAPI Rewrite图片防盗链规则写法以下ISAPIRewrite已经在我的服务器上正常运作。经测试四种情况正常,即站内链接正常,白名单里的链接正常,盗链者链接屏蔽,搜索引擎链接正常。详细如下;一、完全屏蔽所有盗链来源的写法(如已有其它规则,则置于已有规则的上面)代码:RewriteCondHost:(.+)RewriteCondReferer:(?!http://\1.*

    2022年7月23日
    7
  • 2020最新Java常见面试题及答案

    Java最新常见面试题+答案汇总1、面试题模块汇总面试题包括以下十九个模块:Java基础、容器、多线程、反射、对象拷贝、JavaWeb模块、异常、网络、设计模式、Spring/SpringMVC、SpringBoot/SpringCloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM。如下图所示:可…

    2022年4月15日
    39
  • 如何防止Arp攻击

    如何防止Arp攻击首先需要查找网关的 IP 和 MAC 地址 查看的方法很多 最直接的在 cmd 里面执行 arp a 但这是被 arp 攻击之前 被攻击成功后 192 168 0 1 对应的 mac 地址会变成攻击电脑的 Mac 地址 还有另一个方法 登录路由器查看 在浏览器输入 192 168 0 1 这里是个人的网关 然后输入帐号密码 登录进去 一般在这里都可以找到一个 lanmac 地址 这个就是 其次将本机的 arp 中的 192 168 0 1 对应的 mac 地址改成静态 在运行中输入 cmd nbsp gt nbsp arp amp

    2026年3月26日
    2
  • idea 设置maven 自动更新[通俗易懂]

    idea 设置maven 自动更新[通俗易懂]1.file->Settings2.Maven->Importing->勾选ImportMavenprojectsautomatically

    2026年4月17日
    4
  • lamp配置python_LAMP环境搭建

    lamp配置python_LAMP环境搭建这周尝试了 LAMP 环境的搭建 虽然遇到问题 跌跌撞撞 大体上还是完成了搭建 一 了解 1 LAMP 就是 linux 操作系统 apache web 服务器软件 mysql 数据库 php 编程语言 的架构简称 注 M 有时也代表 MariaDB P 有时代表 perl 或 python 2 使用者可以在该环境下开发网站 LAMP 的四个组件都是开源的 所以该组合受到了极大的欢迎 二 行动 1 安装 A

    2026年3月26日
    2
  • ununtu14安装csitools_ubuntu 16.04 安装

    ununtu14安装csitools_ubuntu 16.04 安装相关包的下载网址:http://www.netfilter.org/projects/iptables/downloads.html1、解压进入目录#tar-vxjfipset-6.24.tar.bz2#cd cdipset-6.24/2、初始化ipset编译环境,需要automake,autoconf,pkg-config和libtool的支持。#./autog

    2022年10月6日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号