牛客网专项练习——C语言错题集(6)

news2024/11/16 19:26:26

文章目录

  • 数组地址的移位
  • C 源程序和函数的关系
  • 二维数组值的表示方式
  • (n & (n-1)) == 0
  • 容易出错的 ++
  • 位运算
  • fseek 可以实现的操作

数组地址的移位

在这里插入图片描述

个人理解:

这题的 A C 选项的差别应该在优先级上(下文有 C 语言运算符优先级表),取地址 和 ++ 属于同一类(单目运算符),所有单目运算符的优先级都是 2,而且和其他运算符不同的是,其他运算符与同等级运算符同时存在时,是从左往右结合,但单目运算符是从右往左。那这样是不是说 C 选项没问题呢?

C 还是有问题的,错就错在 ++ 在 a[0] 右边,我们都知道累加运算符是先取值再加 1,所以 &a[0]++ 还是会先取 a[0] 的地址,然后再加 1,但是,这里又有问题了,这时的加 1 会作用在 a[0] 上还是 &a[0] 上呢?。。。

网上解答(来源不详)
&a[0]++;是错误语句,编译都不会过。因为++是后++,在执行该语句时是不计算的,所以a[0]++是个表达式而不是值,显然用&取一个表达式的地址是非法操作!而如果是&++a[0];则是正确的,因为前++在执行&时已经计算过了:就是先给a[0]+1,然后再取a[0]的地址。

这样才能解释通了,& 不能操作一个表达式,但 &++a[0] 却是没问题的。

下面是 C 语言运算符的优先级表(图片来自网络)

在这里插入图片描述


另外,如果题目中的数组的数据类型为 char,那么答案会是怎样的呢?答案依然是相同的,除非选项中出现了 &a + 1(原因见下文,但貌似不改题目,&a + 1 也是错的)。

题目的讨论区里还有下面这样一句话(貌似作者写错了):

要区分A中的&a[0]+1和&a+1。虽然a作为数组名可以认为是指向数组第一个元素的指针,但是其本质上不是指针,而是编译器隐式来处理成指针。在sizeof和&时例外,所以这里如果是&a+1的话,+1的偏移量取决于数组大小;而a[0]是数组元素,所以+1的偏移量是数组元素的大小。

这句话有点问题,把 &a + 1 改成 a + 1 才对。&a[0] + 1 的偏移量单位为数组类型的字节大小,但 &a + 1 的偏移量单位是数组总大小。

这里简单讨论一下 &a ,a,和 &a[0] 三者的关系,&a[0] 很好理解,就是取数组第一个元素的地址,& 和 [] 抵消,所以 &a[0] 等价于 a + 0(即 a),都表示数组第一个元素的首地址;而 &a 是整个数组的首地址,它的值和 a 是相同的,但意义显然不同,a + 1 是数组第二个元素的地址,而 &a + 1 就直接跳到数组外面去了。

这里可以联想到多维数组,假如有数组 b[2][3],&b[0] 表示第一个元素的地址,&b[0] + 1 等价于 b + 1 和 b[1],b[0] 和 b[1] 两个地址的差值就是 3 个数组元素的大小,也就是第二维数组的大小,而假设 b[0] 就是 a,那么 a 这个数组的大小就是 3 个元素的大小,&a + 1 偏移的大小就是 a 数组的总大小。


C 源程序和函数的关系

1、一个C语言源程序可以由一个或多个源文件组成。
2、每个源文件可由一个或多个函数组成。
3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
4、源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
7、C语言中,有一组相关的控制语句,用以实现选择结构与循环结构:选择控制语句:if; switch、case。循环控制语句:for、while、do…while。转移控制语句:break、continue、goto。

——https://www.php.cn/faq/447392.html

感觉 B 选项是对的呀。

在这里插入图片描述

二维数组值的表示方式

把数组第二维的大小看成 3 了。。。 1 * 4 + 3 = 7, B 是对的。

在这里插入图片描述

(n & (n-1)) == 0

n & n - 1 可以把 n 的二进制的最后一个 1 变为 0,如果 n & (n - 1) == 0,说明 n 的二进制中只有一位是 1,即为 2的幂。2 的幂并不全是偶数,20=1 就是一个奇数,所以该判断是错误的。前面也提到了,这个式子的含义是判断 n 是否为 2 的幂。

在这里插入图片描述

容易出错的 ++

这题出错是因为粗心,不过还是简单梳理一下:

p 是一个 struct student 类型指针,指向 stu[3] 这个数组,A 选项,p->num 等价于 p[0].num 即 6001,A 选项结果为 6002;B 选项,p++ 这个括号是多余的,最后结果就是 p->num ,即 6001;C 选项,结果是 6001;D 选项,p 先偏移一位,然后取值,即 p[1],p[1].num = 6003,选 D。

在这里插入图片描述

位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。

C 语言基本类型包括:整型数据类型、字符数据类型和浮点型数据类型。字符数据都有对应的数字编号,所以也可以参与位运算(相当于整数的位运算)。浮点数有三部分组成:符号位,指数位,数值位。移位操作会使指数位与数值位之间移动,产生的结果没有什么意义。

左移一位才是原操作数的两倍。。。

负数右移高位补 1。

在这里插入图片描述

fseek 可以实现的操作

没注意是多选题。。。

在这里插入图片描述

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

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

相关文章

移动端测试-Adb工具

移动端测试_Adb工具 Adb的基本使用简要介绍通用操作步骤一、连接设备二、断开设备三、安装四、卸载五、抓取日志六、文件传输七、截屏八、清除apk缓存九、查看终端各apk占用内存 Adb的基本使用 简要介绍 adb其实就是移动端的调试工具, 全称为Android Debug Bridge…

chatgpt赋能python:Python设置画笔粗细:从入门到精通

Python设置画笔粗细:从入门到精通 在Python中,画图是非常常见的操作。设置画笔的粗细是其中的一个重要部分。本文将从最基础的设置粗细开始讲起,逐步深入,带您了解Python设置画笔粗细的各种方法。 一、使用pensize()函数 pensi…

【备战秋招】每日一题:5月13日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第三题-火车调度 在线评测链接:P1288 题目描述 塔子哥是一位火车车厢调度员。 这一天,一列带有 n 个编号车厢的列车进站了,编号为 1\rightarrow …

【瑞萨RA_FSP】GPT—— 通用PWM定时器

文章目录 一、PWM简介二、GPT简介三、GPT的框图分析1. 计数器2. 周期设置和周期设置缓冲寄存器3. 时钟输入4. 控制寄存器5. 比较器和比较/输入捕获寄存器6. 中断请求信号7. IO输入输出引脚8. ELC事件输入9. 输出相位切换 一、PWM简介 PWM 的全称是脉冲宽度调制(Pul…

chatgpt赋能python:如何安装PyQt5

如何安装PyQt5 Python是现在最受欢迎的编程语言之一。Python与它的第三方库使得开发者能够在不同的领域中编写高质量的代码。因此,Python已经成为了许多开发者的首选之一,而PyQt5则是Python中使用最多的图形界面开发工具之一。在这篇文章中,…

chatgpt赋能python:Python环境安装必知必会

Python环境安装必知必会 Python作为一种高效、易用、广受欢迎的程序语言,在数据分析、人工智能、Web开发等领域都得到了广泛应用。如果您也想学习Python,或者需要开发Python程序,那么必须首先安装Python环境。本文将为您介绍Python环境安装的…

分享!!前端也需要了解的一些技术!!

目录 1、临时路径共享使用 2、关闭指定端口号的进程 1、临时路径共享使用 场景:自己开发中的pc、移动端、app等,由于还在开发中,没有上线,此时有的人需要暂时使用它么,那么就可以创建一个临时路径,共享给…

Anaconda jupyter lab安装及初使用

之前写了一篇: Anaconda、Jupyter的安装部署及使用问题总结 最近又用python比较多,升级了一下本机的anaconda版本,并使用jupyter lab来编写python脚本,本文记录一下升级、使用过程。 安装anaconda 下载安装包 Anaconda3-2023.03…

【Biomechanics】1 Biomechanics as an Interdiscipline

无回到目录第2章 文章目录 1.0 Introduction1.1 Measurement, Description, Analysis, and Assessment1.1.1 Measurement, Description, and Monitoring1.1.2 Analysis1.1.3 Assessment and Interpretation 1.2 Biomechanics and its Relationship with Physiology and Anatomy…

基于flask的web应用开发——搭建一个云盘

目录 0. 前言1. 实现开放下载链接2. 稍加改装3. 效果演示4. 云服务器项目部署 0. 前言 本节利用 flask 开放下载链接 操作系统:Windows10 家庭版 开发环境:Pycahrm Comunity 2022.3 Python解释器版本:Python3.8 第三方库:fla…

Opencv的getRotationMatrix2D函数底层解析

源码 cv::Mat cv::getRotationMatrix2D( Point2f center, double angle, double scale ) {angle * CV_PI/180;double alpha cos(angle)*scale;double beta sin(angle)*scale;Mat M(2, 3, CV_64F);double* m M.ptr<double>();m[0] alpha;m[1] beta;m[2] (1-alpha)*…

chatgpt赋能python:Python怎么装pip库

Python怎么装pip库 Python是一种高级编程语言&#xff0c;由于其简单易学和功能强大&#xff0c;成为众多开发者的选择。但是在开发过程中&#xff0c;需要使用到各种库。pip是Python的软件包管理器&#xff0c;通过pip工具&#xff0c;我们可以轻松地安装和管理Python库。 什…

iOS 单元测试之常用框架 OCMock 详解 | 京东云技术团队

一、单元测试 1.1 单元测试的必要性 测试驱动开发并不是一个很新鲜的概念了。在日常开发中&#xff0c;很多时候需要测试&#xff0c;但是这种输出是必须在点击一系列按钮之后才能在屏幕上显示出来的东西。测试的时候&#xff0c;往往是用模拟器一次一次的从头开始启动 app&a…

chatgpt赋能python:Python怎么让输出不换行

Python怎么让输出不换行 Python是一款具有高度灵活性和扩展性的语言&#xff0c;代码简洁易懂&#xff0c;易上手。在Python编程中&#xff0c;输出的相关操作也是非常常见的。在某些情况下&#xff0c;我们需要让输出内容在同一行显示&#xff0c;这时我们需要使用Python提供…

【Docker】技术架构演进

基本概念 应用&#xff08;Application&#xff09; / 系统&#xff08;System&#xff09; ​ 为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比&#xff1a;为了完成一项任务&#xff0c;而搭建的由一个人或者一群相互配的人组成的团队。 模块&#xff0…

C++【STL】之list的使用

文章目录&#xff1a; list介绍list使用1. 默认成员函数1.1 构造函数1.2 拷贝构造1.3 赋值重载1.4 析构函数 2. 迭代器3. 容量操作4. 数据访问5. 数据修改5.1 插入删除5.2 交换调整清理 6. 其他操作6.1 链表拼接6.2 链表移除6.3 排序6.4 链表逆置 list介绍 list是可以在常数范围…

STM32软件定时器

目录 什么是定时器&#xff1f; 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …

chatgpt赋能python:Python设置画布背景颜色

Python设置画布背景颜色 Python语言是一种广泛应用于科学计算、数据处理和数据可视化的高级脚本语言。它之所以如此流行&#xff0c;主要是因为它简单易学&#xff0c;并且具有很强的灵活性。在Python中&#xff0c;我们可以使用各种库来创建图形化界面、游戏和数据可视化应用…

C高级 day35

1、ubuntu的网络配置 1、查看网络是否连接 ping baidu.com 2、保证虚拟机有桥接网络 虚拟机---->设置---->网络适配器------>选择桥接或者是Vmnet0 给虚拟机添加桥接网络&#xff0c;如果没有vmnet0&#xff0c;添加网络 3、配置虚拟机的桥接网络 右上角网络图标-----…

RunCat 自定义动图

下载资源 下载资源 Runners Store 在商店购买 Self-Made Runner 设置 添加多张图片 下载 zhiyin_basketball 图片 zhiyin_basketball 下载 更新版本 设置图片 Format: PNGHeight: 36pxWidth: 10~100px 调整图片大小 使用convert命令查看图片宽和高 convert 0.png -print …