《C和指针》(3)数据

news2024/11/17 13:35:58

问题

  1. 假定你正编写一个程序,它必须运行于两台机器之上。这两台机器的缺省整型长度并不相同,一个是16位,另一个是32位。而这两台机器的长整型长度分别是32位和64位。程序所使用的有些变量的值并不太大,足以保存于任何一台机器的缺省整型变量中,但有些变量的值却较大,必须是32位的整型变量才能容纳它。一种可行的解决方案是用长整型表示所有的值,但在16位机器上,对于那些用16位足以容纳的值而言,时间和空间的浪费不可小视。在32位机器上,也存在时间和空间的浪费问题。
    如果想让这些变量在任何一台机器上的长度都合适的话,你该如何声明它们呢?正确的方法是不应该在任何一台机器中编译程序前对程序进行修改。提示:试试包含一个头文件,里面包含每台机器特定的声明

    :声明整型变量名,使变量的类型必须有一个确定的长度(如int8、int16、int32)。对于你希望成为缺省长度的整数,根据它所能容纳的最大值,使用类似defint8、defint16或defint32这样的名字。然后为每台机器创建一个名为int_sizes.h的文件,它包含一些typedef声明,为你创建的类型名字选择最合适的整型长度口在一台典型的32位机器上,这个文件将包含:
    在这里插入图片描述
    在一台典型的16位整数机器上,这个文件将包含:
    在这里插入图片描述
    注意:虽然说这里也可以使用#define指令,但是最好不要用,例如:

    /*typedef char* d_ptr_to_char */
    #define d_ptr_to_char char*
    dptr_to_char a,b; 
    

    上面两行语句等价于char *a,b;,即正确声明了a,但错误声明了b。如果将宏定义替换为注释代码,那么a和b均可被正确声明。

  2. 假定你有一个程序,它把一个long整型变量赋值给一个short整型变量。当你编译程序时会发生什么情况?当你运行程序时会发生什么情况?你认为其他编译器的结果是否也是如此?

    :许多编译器都会发出警告信息。标准大致是这样定义运行时行为的:如果要分配的值足够小,可以放入较短的变量中,则保留其值;否则,它依赖于实现。措辞谨慎的描述意味着实现可以简单地丢弃不合适的高阶位,这在大多数机器上提供了最有效的目标代码。这显然是不可移植的。

  3. 假定你有一个程序,它把一个double变量赋值给一个float变量。当你编译程序时会发生什么情况?当你运行程序时会发生什么情况?

    :编译它时,您可能会收到一条警告消息。运行时行为的定义方式与整数的定义方式大致相同:如果值适合较小的变量,则它有效;否则它依赖于实现。然而,对于浮点值,只有当其指数大于较短类型所能容纳的值时,值才“不适合”。如果指数合适,尾数仍然存在,尾数可能比较短类型所能保持的意义更大。在这种情况下,该值被替换为最接近的值,该值可以在较短的变量中表示;这取决于实现,是循环、截断还是执行其他操作。

  4. 编写一个枚举声明,用于定义硬币的值。请使用符号PENNY、NICKEL等


    在这里插入图片描述

  5. 下列代码段会打印出什么东西?
    在这里插入图片描述
    :变量jar是一个枚举类型,但它的值实际上是个整数。但是,printf格式代码%s用于打印字符串而不是整数。结果,我们无法判断它的输出会是什么样子。如果格式代码是%也那么输出将会是:

    32
    48
    
  6. 一个无符号变量可不可以比相同长度的有符号变量容纳更大的值?

    :否。任何给定的n个位的值只有2"个不同的组合。一个有符号值和无符号值仅有的区别在于它的一半值是如何解释的.在一个有符号值中,它们是负值。在一个无符号值中,它们是一个更大的正值。

  7. 假如int和float类型都是32位长,你觉得哪种类型所能容纳的值精度更大一些?

    : float的范围比int大,但如果它的位数不比int更多,它并不能比int表示更多不同的值。
    前一个问题的答案已经提示了它们应该能够表示的不同值的数量是相同的,但在绝大多数浮点系统中,这个答案是错误的。零通常有许多种表示形式,而且通过使用不规范的小数形式,其他值也具有多种不同的表示形式。因此,float能够表示的不同值的数量比int少。

  8. 下面是两个代码片段,取自一个函数的起始部分,它们完成任务的方式有何不同?
    在这里插入图片描述
    :没有不同

  9. 如果上一个问题中代码片段的声明中包含有const关键字,它们完成任务的方式又有何不同?

    :左边的声明仍然执行以前的操作,但右边的声明有错误;不能为常量变量赋值

  10. 在一个代码块内部声明的变量可以从该代码块的任何位置根据名字来访问,对还是错?

    :是的,除非嵌套块声明另一个具有相同名称的变量,这会隐藏早期变量并使其无法从嵌套块中访问。

  11. 假定函数a 声明了一个自动整型变量x,你可以在其他函数内访问变量x,只要你使用了下面这样的声明:
    在这里插入图片描述
    对还是错?

    : 错,这些变量永远不能通过名称从其他块访问。

  12. 假定上一个问题中的变量x被声明为static。你的答案会不会有所变化?

    :不,这会更改其存储类,但不会更改其范围;答案仍然是错误的。

  13. 假定文件a.c的开始部分有下面这样的声明
    在这里插入图片描述
    如果你希望从不同的源文件的函数中访问这个变量,需不需要添加额外的声明,如果需要的话,应该添加什么样的声明?

    :添加如下声明
    在这里插入图片描述

  14. 假定上一个问题中的声明包含了关键字static。你的答案会不会有所变化

    :如果声明包含了static,那么其他源文件将不可能访问到该变量。

  15. 假定一个函数包含了一个自动变量,这个函数在同一行中被调用了两次。试问,在函数第2次调用开始时该变量的值和函数第1次调用即将结束时的值有无可能相同?

    :是的,这是可能的,但你不应该指望它。而且,即使不存在其他的函数调用,它们的值
    也很可能不同。在有些架构的机器上,一个硬件中断将把机器的状态信息压到堆栈上,它们将破坏
    这些变量

  16. 当下面的声明出现于某个代码块内部和出现于任何代码块外部时,它们在行为上有何不同?
    在这里插入图片描述
    :内部:变量是自动的,每次调用函数时都会重新初始化,其范围仅限于函数,没有链接。外部:变量是静态的,在程序开始运行之前只初始化一次,它具有文件范围和外部链接

  17. 假定你想在同一个源文件中编写两个函数x和y,需要使用下面的变量:
    在这里插入图片描述
    你应该怎样编写这些变量?应该在什么地方编写?注意:所有初始化必须在声明中完成,而不是通过函数中的任何可执行语句来完成。


    在这里插入图片描述

  18. 确认下面程序中存在的任何错误(你可能想动手编译一下,这样能够踏实一些)口在去除所有错误之后,确定所有标识符的存储类型、作用域和链接属性。每个变量的初始值会是什么?程序中存在许多同名的标识符,它们所代表的是相同的变量还是不同的变量?程序中的每个函数从哪个位置起可以被调用?
    在这里插入图片描述
    在这里插入图片描述


    在这里插入图片描述在这里插入图片描述
    Note a:如果变量在任何其他声明中都没有初始化,那么它的初始值将为零。
    Note b:函数参数的初始值是调用函数时传递的参数。
    Note c:extern关键字不会改变第24行中声明的y的链接

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

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

相关文章

决策树-入门

1、认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 怎么理解这句话?通过一个对话例子 想一想这个女生为什么把年龄放在最上面判断!&a…

【六:pytest框架介绍】

常见的请求对象requests.get()requests.post()requests.delete()requests.put()requests.request()常见的响应对象reprequests.request()//返回字符串格式数据print(req.text)//返回字节格式数据print(req.content)//返回字典格式数据print(req.json)#状态码print(req.status_c…

【PADS封装】2.4G PCB天线封装(量产用)

包含了我们平时常用的2.4GPCB天线封装,总共11种封装。完全能满足日常设计使用。 下载链接!!https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247548815&idx1&sne625e51a06755a34ab4404497770df48&chksmfcfb2c58cb8ca5…

10个最佳的免费LOGO设计工具,不容错过

优秀的LOGO是企业的无形资产,大公司会花费数万甚至数百万定制特色LOGO,而一些中小企业或企业家,由于预算有限,往往希望找到更具成本效益的渠道。如果你直接找设计师朋友帮忙做LOGO,肯定会让对方面对黑线,以…

EPLAN_006#部件库快速导入、树结构、部件导航器、材料表导航器

一、部件的常用格式 XML文件:只是一些基本参数 CSV文件:只是一些基本参数 EDZ文件:完整的数据格式,可以添加2D,3D宏,是相对比较完整的格式 二、目录更改 在选项——设置——用户——管理——目录中进行相关设置 三、ED…

多目标优化算法评价指标

参考:Performance metrics in multi-objective optimization 单目标优化问题比较各种算法的性能可以直接通过目标值比较,但是多目标优化算法找到的往往是帕累托解,需要一些合适的评价指标来比较这些算法的性能。 使用数量排名前10的评价指标及…

基于Java的人事考勤签到管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

pnpm的环境安装以及安装成功后无法使用的问题

文章目录 前言1、使用npm 安装2、安装后的注意点3、遇到问题4、配置path的环境变量(1)找到环境变量(2)找到并双击path的系统变量(3)复制第1步中使用npm安装的红框部分的路径(4)将第&…

推荐《幽游白书》

《幽游白书》是日本漫画家富坚义博于1990年12月3日—1994年7月25日于集英社旗下杂志《周刊少年Jump》上连载的少年漫画作品,全175话(含外传一话)。现时发行的单行本共计19册,电子版由漫番漫画、哔哩哔哩漫画发布 [1-2] 。 本作最…

零基础入门网络渗透到底要怎么学?_网络渗透技术自学

前言: 很多朋友问我,想搞网络安全,编程重要吗,选什么语言呢? 国内其实正经开设网络安全专业的学校很少,大部分同学是来自计算机科学、网络工程、软件工程专业的,甚至很多非计算机专业自学的。…

跨界合作兰博基尼,泡泡玛特带你驾驭时空“玩”有引力

近期,泡泡玛特携手兰博基尼汽车,于上海国际赛车场进行了一场玩味十足的赛道体验。25位兰博基尼车主,及多位汽车领域知名媒体人、kol到场参与。兰博基尼跑车巡游、专业车手驾驶的兰博基尼涂装赛车试乘、MEGA SPACE MOLLY 1000%/400%兰博基尼汽…

驱动编写应用程序控制三盏灯亮灭

应用程序 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> int main(int argc, char const *argv[]) {char buf[128] {0};int fd open("/dev/mych…

接口响应慢该如何排查

不知道大家有没有遇到这种情况&#xff0c;接口业务逻辑写完后&#xff0c;用 postman 一调&#xff0c;发现接口响应时间好长&#xff0c;不得不对接口进行优化。但是此时接口的代码往往逻辑比较复杂&#xff0c;调用层次也比较多&#xff0c;很难定位到耗时较长的代码块。 遇…

并发编程-线程池ForkJoinPool(二)

Fork/Join框架介绍 什么是Fork/Join Fork/Join是一个是一个并行计算的框架&#xff0c;主要就是用来支持分治任务模型。 Fork 对应的是分治任务模型里的任务分解&#xff0c;Join 对应的是结果合并。 核心思想&#xff1a;将一个大任务分成许多小任务&#xff0c;然后并行执…

【ROS 2 基础-常用工具】-7 Rviz仿真机器人

所有内容请查看&#xff1a;博客学习目录_Howe_xixi的博客-CSDN博客

学习记录683@类别不平衡问题解决的基本策略之再缩放的数学解释

什么是类别不平衡问题 分类学习方法都有一个共同的基本假设&#xff0c;即不同类别的训练样例数目相当。如果不同类别的训练样例数目稍有差别&#xff0c;通常影响不大&#xff0c;但若差别很大&#xff0c;则会对学习过程造成困扰。例如有998个反例&#xff0c;但正例只有2个…

LLDB 三种输出方式 对比及原理探索

前言 当我们的项目过大时,就会使我们项目的编译耗时过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。 什么是 LLDB? LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存…

程序被加载到进程的哪个位置?

程序被加载器加载到内存后&#xff0c;通过/proc/$pid/maps文件&#xff0c;我们可以观测到程序被加载的内存位置。那么&#xff0c;通过打印进程内存的方式&#xff0c;让我们确认程序是不是真的加载到内存&#xff0c;以及加载到内存的程序和硬盘中的文件有没有区别。 编写测…

未来数字化转型发展的前景如何,企业又该怎么实现?

商业世界有一个认识&#xff0c;互联网只用看中国和美国&#xff0c;其他国家已经被远远甩在了后边&#xff0c;移动互联网的出现更是将互联网的跨地域、跨国、互联等属性发挥到了极致&#xff0c;让众多互联网巨头开启了争夺世界各国市场的脚步。 移动互联网的飞速发展以及物…

drawio模板以及示例

drawio都能做那些事情和模板示例 你可以使用drawio&#xff0c;并使用drawio提供的扩展模板库和大量的形状库&#xff0c;针对很多不同的工业领域创建不同类型的图表。 针对如下的内容中的所有的图&#xff0c;均可以下载源文件并导入到drawio中再次编辑&#xff08;供学习者…