C语言遇见的一些小问题

news2024/9/23 7:20:07

问题如下:

1:为什么这样的代码为报错

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<stdlib.h>
using namespace std;
int main()
{
	int i = 7; printf("%d\n", i++ * i++);//49
	int a[10] = {0};
	for (i = 0; i < 10; i++)
	{
		cout << a[i] << endl;
	}
	a[i] = i++;
	printf("%d",a[i]);
	return 0;
}

通过调试发现问题出在for循环后i此时为10,a[10]就已经数组越界了,因此a[i]是a[10]不是a[7],打印的a[i]是错误值 

4c3e9cc124f04e7d9de61ac0336fb1d9.png

 

 2: 下面的代码 int i=7; printf("%d\n", i++ * i++); 返回 49?不管按什么顺序计算, 难道不该打印出56吗?

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<stdlib.h>
int main()
{

	int i = 7; printf("%d\n", i++ * i++);//49		
	return 0;
}

87e494b4deee440b9f223085fa131459.png

问题解释:

参考书籍《你必须知道的495个C语言问题》

        后置++和后置--是先使用再自增自减,没有任何保证确保自增或自减会在输出变量原值之 后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表 达式 “完成”) 之前 的某个时刻进行。本例中, 编译器选择使用变量的旧值相乘以后再对二者进行自 增运算。

包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多 个不确定副作用” 是指在同一个表达式中使用导致同一对象修改两次或修改以后 又被引用的自增, 自减和赋值操作符的任何组合。

        我们不需要探究这些在编译器中是如何实现的,但要知道后置++,后置--与前置++,前置--的区别。

3:对于代码 int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为 4, 哪个是正确的?

在VS2022编译器上结果为4

0062ff13726948acb95dc41d5dc91a9d.png

但不一定每个编译器都是4。i++ 和 ++i 都不同于 i+1。如果你要使 i 自增 1, 使用 i=i+1, i+=1, i++ 或 ++i, 而不是任何组合。

4:我可否用括号来强制执行我所需要的计算顺序?

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<stdlib.h>
int f()
{
	return 2;
}
int g()
{
	return 3;
}
int h()
{
	return 4;
}
int main()
{
	int a = f() + g() * h();
	printf("%d\n", a);
	return 0;
}

78659434160946dba1be6ef706495cba.png

我们知道*运算符优于+运算符,但f(),g(),h()函数哪一个先被调用呢,通过调试我发现调用顺序先f(),接着g(),最后h()。如果运算表达式为f()+h()*g()则先f(),再h()最后g()。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 ——— #define定义标识符

目录 #define 定义常变量 #define 定义字符串 #define 定义一条代码 #define 定义的标识符是否需要加分号 #define 定义常变量 代码演示&#xff1a; #define M 100 //定义常变量 代码用途&#xff1a; int a M; int arr[M] { 0 }; 此时的 M 具有常属性&#xff0c…

什么是UART?

1.什么是UART&#xff1f; 通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常称作UART。UART 表示通用异步接收机/发射机&#xff0c;定义用于在两个设备之间交换串行数据的协议或一组规则。UART 非常简单&#xff0c;仅在发射机和…

C语言中static与extern关键字的深入解析

在C语言编程中&#xff0c;static和extern是两个非常重要的关键字&#xff0c;它们各自有着独特的用途。本文将深入探讨这两个关键字的工作原理、底层实现机制以及在实际开发中的应用。 static关键字 1. 原理与作用 static关键字用于声明变量或函数具有特定的作用域和生命周…

5.4分段线性灰度变换

目录 实验原理 分段线性灰度变换的概念 变换函数的形式 示例代码1 示例结果1 示例代码2 示例结果2 示例代码3 运行结果3 示例代码4 运行结果4 实验原理 在OpenCV中&#xff0c;分段线性灰度变换&#xff08;Piecewise Linear Gray Level Transformation&#xff09…

GitLab 是什么?GitLab使用常见问题解答

GitLab 是什么 GitLab是由GitLab Inc.开发&#xff0c;使用MIT许可证的基于网络的Git仓库管理工具开源项目&#xff0c;且具有wiki和issue跟踪功能&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。 ​GitLab 是由 GitLab Inc.开发&#xff0c…

【Prometheus】Prometheus的特点、数据采集方式、架构、数据模型详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

vue3整合antv x6实现图编辑器快速入门

安装&#xff1a; npm install antv/x6 --save如果使用 umd 包&#xff0c;可以使用下面三个 CDN 中的任何一个&#xff0c;默认使用 X6 的最新版&#xff1a; https://unpkg.com/antv/x6/dist/index.jshttps://cdn.jsdelivr.net/npm/antv/x6/dist/index.jshttps://cdnjs.clo…

从汇编层看64位程序运行——likely提示编译器的优化案例和底层实现分析

大纲 代码分析with_attributes::powno_attributes::pow分析 我们在《Modern C——使用分支预测优化代码性能》一文中介绍了likely提示编译器进行编译优化&#xff0c;但是我们又讲了最终优化不是对分支顺序的调换&#xff0c;那么它到底做了什么样的优化&#xff0c;让整体性能…

个人旅游网(5)——功能详解——购物车功能

文章目录 一、设计购物车二、购物车对redis的一系列操作三、购物车3.1、接口详解3.1.1、addCart&#xff08;将当前旅游路线加入到购物车中&#xff09;3.1.2、showCartItem&#xff08;显示刚刚加入购物车的商品&#xff09;3.1.3、findAll&#xff08;将购物车里的所有旅游路…

骨灵冷火!Solon Cloud Gateway 照面发布

骨灵冷火&#xff0c;是练药的好火哟。极冷&#xff0c;又极热。在冰冻中被烧死&#xff1a;&#xff09; 1、认识 Solon Cloud Gateway Solon Cloud Gateway 是基于 Solon Cloud、Vert.X 和 Solon Rx(reactive-streams) 接口实现。小特点&#xff1a; 纯响应式的接口体验流…

KAN学习Day1——模型框架解析及HelloKAN

说明 最近了解到了一个新东西——KAN&#xff0c;我的毕设导师给推荐的船新框架。我看过很多剖析其原理的文章&#xff0c;发现大家对其持有的观点都各不相同&#xff0c;有的说可以颠覆传统MLP&#xff0c;有的说可以和Transformer同等地位&#xff0c;但是也有人说它训练速度…

YoloV8改进策略:IoU改进|Unified-IoU用于高质量对象检测

摘要 Unified-Unified-IoU&#xff08;UIoU&#xff09;是一种新的边界框回归损失函数&#xff0c;旨在改进目标检测任务中的预测框质量&#xff0c;特别是在高IoU阈值和IoU&#xff08;UIoU&#xff09;是一种新的边界框回归损失函数&#xff0c;旨在改进目标检测任务中的预测…

nginx的基本使用示例(负载均衡,虚拟主机,动静分离)的详细配置过程

文章目录 前言前置工作httpd主机tomcat主机 nginx主机配置负载均衡配置过程效果展示 虚拟主机配置过程效果展示 动静分离配置过程 排除思路 前言 本篇博客展示nginx的基本使用案例&#xff0c;后端由httpdtomcat组成&#xff0c;linux版本: rocky9.2 虚拟机ipnginx192.168.10…

安防监控视频打手机检测算法核心技术打手机检测算法源码、模型简介

在数字化的今天&#xff0c;智能手机几乎已成为人们生活中不可或缺的一部分。然而&#xff0c;手机的广泛使用也带来了一些挑战&#xff0c;比如在公共场所、教育机构和工作环境中的手机干扰。为了解决这些问题&#xff0c;打手机检测算法应运而生&#xff0c;成为管理人员和机…

hive学习(六)

一、函数 1.单行函数 特点&#xff1a;输入一行&#xff0c;输出一行&#xff08;一进一出&#xff09; 可分为日期函数&#xff0c;字符串函数&#xff0c;集合函数&#xff0c;数学函数和流程控制函数等 1&#xff09;算术运算函数 2&#xff09;数值函数 --round函数 …

机器学习如何用于音频分析?

机器学习如何用于音频分析&#xff1f; 一、说明 近十年来&#xff0c;机器学习越来越受欢迎。事实上&#xff0c;它被用于医疗保健、农业和制造业等众多行业。随着技术和计算能力的进步&#xff0c;机器学习有很多潜在的应用正在被创造出来。由于数据以多种格式大量可用&…

电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)

一.前言 前段时间&#xff0c;激烈的电赛刚刚结束&#xff0c;很荣幸啊&#xff0c;也是十分的不甘心&#xff0c;本次的湖北赛区H题只拿到了一个省二&#xff0c;看最终的排名&#xff0c;在H题中我们离省一也就差几名。但是整个比赛已经过去了&#xff0c;现在不甘与不舍&…

浏览器按F12进入开发者模式后频繁因为异常而暂停导致无法分析页面xpath

在分析某个内部页面xpath时&#xff0c;遇到一个问题&#xff0c;因为频繁异常而自动暂停导致无法分析页面xpath&#xff0c;如下图&#xff1a; 折腾良久发现把下图右侧的两个抛出异常自动暂停的开关 取消勾选就可以了

微信小程序接入客服功能

前言 用户可使用小程序客服消息功能&#xff0c;与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用&#xff0c;本篇介绍客服功能的基础开发以及进阶功能的使用&#xff0c;另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…

2.4 堆栈

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…