c语言三目运算符的一些小细节,赋值不改变变量的值

2023-10-27

C语言三目运算符的一些小细节,赋值不改变变量的值。

今天无聊翻翻C语言的课本,看到三目运算符的时候,心想这个和if else 语句用法一样,突然脑海里浮现一个想法,三目运算符结构(表达式1 ? 表达式2 :表达式3),“表达式1” 为逻辑表达式,如果为真(非0的值)则执行表达式2,如果为假(表达式1的值为0),则执行表达式3。 既然表达式1是逻辑表达式,如果记得没错在C语言中赋值语句也可以当逻辑表达式,其判断是赋值完成最后得到的值(为零则是假,非零则是真),所以当三目运算符的表达式1的值为赋值语句时,那肯定可以执行,万万没想到的是,猜中了开头,没猜中结尾。

#include<stdio.h>
 int main(){
	int x = 5, y;
	y = ( x = 1 ?  x++ : x);
	printf("x = %d, y = %d\n" ,x ,y);
	return 0;
	}

这是第一次想的测试代码,本来以为在执行完 x=1 后,x的值会随着发生改变,心想这玩意不就是if else 语句的简写吗,这有什么难的,可万万没想到的是,上机测试的时候,出问题了。
猜想结果(x = 2 , y = 1)。
在这里插入图片描述
测试结果出来后,这是怎么回事,和我想得不一样啊,怎么没有得到我想要的值,以为是我代码写错了,在经过排查后,没毛病啊,然后心想,这个和if else 语句一样, 换成if else 语句试试。
在这里插入图片描述
这,这是怎么回事,不敢相信,又回去测了一下三目运算符的例子。还是没有得到想要的结果,我炸了,难道是我把三目运算符的概念记错了?又赶紧去翻书。
在这里插入图片描述
没毛病啊,这是哪出了问题,一时间也想不过来,然后就去找各路神仙请教,经过讨论后,得到结果,三目运算符和if语句还是有区别的,三目运算符表达式1只是选择,不会改变其原有的值,但是if else 语句会。三目运算符的表达式1,只是逻辑判断(非0选择表达式2,否则选择表达式3),不会改变其原有的值,得到结果后,就去证实。

在这里插入图片描述

这时,经过执行表达式1后,选择执行表达式2,最后结果赋值给变量y,结果和猜测的一样,当然这一个例子还是无法证实。

在这里插入图片描述

经过测试后证实了我们的猜测,当然只是猜测,这也牵扯到了C语言的三目运算符和if else 语句的底层实现原理,那些知识还没学到,现在只能猜猜了,哈哈哈。测试时也遇见了新问题,发现编译器不同测试结果也略有不同,我用是vc++ 6.0 和 vc++ 2010,当用dev的测试第一个例子时出现了新的结果,有兴趣可以去试试哦。
由于目前知识有限,只能到这了,如果有新的猜测或者新的结果,当然还有知道C语言底层原理的童鞋,有兴趣欢迎帮我再补充哦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言三目运算符的一些小细节,赋值不改变变量的值 的相关文章

随机推荐

  • c++ 内存存储 解决char*p, char p[]的问题

    栈 通常用于编译期间就能确定存储大小的变量的存储区 用于在函数作用域内创建 在离开作用域后自动销毁的变量的存储区 有种说法是默认大小1M 堆 通常用于那些在编译期间不能确定存储大小的变量的存储区 它的存储空间是不连续的 一般由malloc
  • python学习—第一步—聪明方法学python

    目录 学习参考资料 遇到的一些小问题 python环境配置与基本语法 python安装与vscode绑定 python常量与变量 常量 变量 python运算符与函数 运算符 函数 局部变量与全局变量 控制流 python数据结构 序列Li
  • Tm4c123GX(tiva)入门详细教程

    TM4C123GX系列 学了几个月的Tiva 总的来说这个款单片机功能还是比较强大的 下面我将以TM4C123GH6PM为例介绍其基本资源及工程建立 点亮板卡上的LED灯以及对基本的时钟配置 PWM uart Timer等方面来做简要说明
  • 使用R语言操作数据框时,我们经常需要创建新的数据列来进行进一步的分析和处理。在本文中,我们将介绍如何通过加和两个数据列来创建一个新的数据列。

    使用R语言操作数据框时 我们经常需要创建新的数据列来进行进一步的分析和处理 在本文中 我们将介绍如何通过加和两个数据列来创建一个新的数据列 要创建新的数据列 我们可以使用mutate 函数以及数据框中的两个已有的数据列 假设我们有一个数据框
  • Vulkan SDK 中的 demo 编译配置 win10 vs2019

    一 下载安装 开始可以简装 然后在打开maintenancetool exe进一步安装其他部件 下载安装 Vulkan SDK Vulkan SDK What s in the SDK Where to Download 会在安装目录中找到
  • 减小内存的占用问题——享元模式和单例模式的对比分析

    前言 接口的常用用法都有什么 策略模式复习总结 的话题提起了 如何解决策略类膨胀的问题 说到 有时候可以通过把依赖于环境Context类的状态保存到客户端里面 而将策略类设计成可共享的 这样策略类实例可以被不同客户端使用 换言之 可以使用享
  • 【前端是什么】

    前端是什么 文章目录 前端是什么 1 前端的概念 2 前端的分类 3 前端的工作流程 4 互联网企业的典型组织结构图 1 前端的概念 1 1 前端的定义 对于网站来说 通常是指网站的前台部分 包括网站的表现层和结构层 通俗点就是用户可以看到
  • 关于STM32的IAP超详细图文解说

    IAP是In Application Programming的首字母缩写 IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写 目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级 以上是IA
  • 【Linux网络编程】传输层udp协议篇

    udp协议篇 一 本篇是在应用篇的后面的 二 传输层 2 1 再谈端口号 2 2 1 两个问题 2 2 2 两个常用命令 2 2 UDP协议 2 2 1 udp协议端格式 理解报头 2 2 2 udp的特点 2 2 3 udp的缓冲区 2
  • JAVASCRIPT this关键字详解

    this指向哪里 一般而言 this指向函数执行时的当前对象 In JavaScript as in most object oriented programming languages this is a special keyword
  • UTF-8转换成GB2312的全处理

    主题 将UTF 8编码的字符串转化成GB2312的编码 没有对应编码的字符串转化为 DEC 的格式 如 gt 54924 语言 PHP Javascript 内容 浏览器用Javascript中encodeURI函数将字符串 包含非GB23
  • 蓝桥杯C++组怒刷50道真题(填空题)

    深夜伤感网抑云 南辰Music 御小兮 单曲 网易云音乐 多年后再见你 乔洋 周林枫 单曲 网易云音乐 填空题25题完结 等23年题目出来了会补充 下一步就是编程题了 24年蓝桥杯之前 一定会给大家精心准备几个博客 目录 填空题 一 蓝桥杯
  • OSPF和RIP

    OSPF协议 劢态路由协议 通过在路由器上运行劢态路由协议 在路由器乊间交互路由信息 学习路由信 息最织生成路由转収表项 常见的劢态路由协议 RIP OSPF ISIS EIGRP BGP 劢态路由协议适用场合 路由器数量较夗 网段数量较夗
  • 找出一个无序数组的中位数

    要解决这个问题首先要了解什仫是中位数 所谓的中位数就是在一组有序的数字中找到中间的那个数字 如果数字的个数是奇数则直接返回中间的那个数 如果数字的个数是偶数此时这组数据的中位数有两个 取中间两个数的平均值即可 想法一 不论用什仫排序算法使得
  • flutter android 和 ios 发布

    android篇 keytool genkey v alias android keyalg RSA validity 20000 keystore Users 当前用户的用户名 android keystore keytool genke
  • Web学习之JavaScript

    文章目录 一 什么是JavaScript 二 JavaScript 用法 三 Chrome 浏览器中执行 JavaScript 四 JavaScript 语法 五 JavaScript 语句 六 JavaScript 函数 七 JavaSc
  • 【redis】单机安装部署redis7.0版本

    下面我以redis 7 0 5版本 来进行讲解 链接 https pan baidu com s 1FesU8iHJQyW4pVARIqeQAA 提取码 qtqc 单机安装Redis 1 首先需要安装Redis所需要的依赖 yum inst
  • 预测知识

    预测知识 预测技术流程及模型评价 目录 预测知识 预测技术流程及模型评价 神经网络 机器学习 深度学习 参考资料 神经网络 神经网络 neural network 是机器学习的一个重要分支 也是深度学习的核心算法 神经网络的名字和结构 源自
  • 上传图片几种方式解析(上)--file

    浏览器上传图片到服务器时通过input type file 以及onchange事件的配合实现的 element和vant的ui库的图片上传都是基于这个 input的files属性 1 众所周知 一级dom事件不同于addeventlisn
  • c语言三目运算符的一些小细节,赋值不改变变量的值

    C语言三目运算符的一些小细节 赋值不改变变量的值 今天无聊翻翻C语言的课本 看到三目运算符的时候 心想这个和if else 语句用法一样 突然脑海里浮现一个想法 三目运算符结构 表达式1 表达式2 表达式3 表达式1 为逻辑表达式 如果为真