第3章 数据

embedded/2024/11/28 2:30:48/

第3章 数据

  • 学习笔记
  • 书后练习
    • 问题3
    • 问题7
    • 问题10
    • 问题11
    • 问题21

学习笔记

  • value = value - '0'; 通常用于将字符转换为其对应的整数值
  • enum Jar_Type { CUP, PINT, QUART, HALF_GALLON, GALLON }; 这些符号名的实际值都是整型值,例如,CUP 是0,PINT 是1。 enum Jar_Type { CUP = 8, PINT = 16, QUART = 32, HALF_GALLON = 64, GALLON = 128 }; 只对部分符号名用这种方式进行赋值也是合法的。如果某个符号名未显式指定一个值,那么它的值就比前面一个符号名的值大1
  • C语言存在字符串的概念:它就是一串以 NUL 字节结尾的零个或多个字符。字符串常量(不像字符常量)可以是空的,尽管如此,即使是空字符串,依然存在作为终止符的 NUL 字节
  • signed 关键字一般只用于 char 类型,因为其他整型类型在缺省情况下都是有符号数。所以,char 可能等同于 signed char ,也可能等同于 unsigned char ,因编译器而异
  • 在C语言中定义指针时,* 可以靠近数据类型也可以靠近标识符。但是最好的使用方式还是靠近标识符。例如,int* a, b, c; 很容易让人误解声明了三个指向整型的指针,但是其实只对标识符 b 有效,如果要声明三个指向整型的指针,可以 int *a, *b, *c; 这样表达
  • 函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归

书后练习

问题3

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

// platform_types.h#ifndef PLATFORM_TYPES_H
#define PLATFORM_TYPES_H#include <stdint.h>#if defined( __16BIT_MACHINE__ )// 对于16位的机器typedef int16_t int_var;typedef uint16_t uint_var;typedef int32_t large_int_var;typedef uint32_t large_uint_var;
#elif defined( __32BIT_MACHINE__ )// 对于32位机器typedef int32_t int_var;typedef uint32_t uint_var;typedef int64_t large_int_var;typedef uint64_t large_uint_var;
#else#error " Unsupported platform "
#endif#endif // PLATFORM_TYPES_H

有没有人有更好的见解呢?

问题7

下列代码段会打印出什么东西?

enum Liquid { OUNCE = 1, CUP = 8, PINT = 16, QUART = 32, GALLON = 128 };
enum Liquid jar;
...
jar = QUART;
printf( "%d\n", jar );
jar = jar + PINT;
printf( "%d\n", jar );

32
48

问题10

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

可以的
举个例子 8bit长度的char数据类型
无符号char 0 ~ 255
有符号char -128 ~ 127
但是两者能容纳的数据量是一样的,都是256

问题11

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

int类型所能容纳的值精度更大一些
int类型只有一位符号位
float类型除了一位符号位外,还需要给指数留几位,所以int类型所能容纳的值精度更大一些
但是float类型能够表示的数据范围更大

问题21

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

自动变量就是函数的局部变量
如果函数对该变量的值进行了修改,则函数第二次调用开始时和函数第一次调用即将结束时的该变量的值很难相同
因为第二次调用函数时该变量又被重新初始化了

http://www.ppmy.cn/embedded/5267.html

相关文章

戒烟生活记录

今天是2024年4月15日&#xff0c;从大前天也就是12号下班后&#xff0c;吃的有一点饱&#xff0c;就感觉身体及其难受&#xff0c;气短呼吸不上&#xff0c;我查了后可能是心脏的问题&#xff0c;并且晚上睡觉有一种呼吸不上&#xff0c;憋气的感觉&#xff0c;然后我就又开始决…

【学习】软件压力测试对软件产品的作用

在信息化高速发展的今天&#xff0c;软件产品已经成为各行各业不可或缺的一部分。然而&#xff0c;随着软件功能的日益复杂和用户需求的不断增长&#xff0c;软件产品的稳定性和可靠性问题也愈发凸显。在这样的背景下&#xff0c;软件压力测试作为软件质量保障的重要手段之一&a…

第八章 透明效果

在渲染模型中控制透明通道。透明度为1,完全不透明;透明度为0,完全不会显示。 两种方法: (1)透明度测试 (2)透明度混合 深度缓冲(z-buffer)用于解决可见性问题。可以决定哪个物体的哪些部分被渲染到前面,哪些部分会被其他物体遮掩。根据深度缓存中的值来判断该片…

Linux的学习之路:9、冯诺依曼与进程(1)

摘要 本章主要是说一下冯诺依曼体系结构和进程的一部分东西。 目录 摘要 一、冯诺依曼体系结构 二、操作系统的概念 三、设计OS的目的 四、管理 五、进程的基本概念 六、PCB 七、在Linux环境下查看进程 八、使用代码创建进程 九、思维导图 一、冯诺依曼体系结构 如…

4.19作业 驱动开发

一、编程要求 在内[[核中不支持浮点类型打印将si7006硬件数据读取到内核空间&#xff0c;拷贝到用户空间在i2c子系统驱动中&#xff0c;需要编写读取温湿度传感器函数在probe函数中 注册字符设备驱动(分步注册)自动创建设备节点通过ioctl函数判断应用层发送命令码&#xff0c;…

嵌入式linux中利用QT控制蜂鸣器方法

大家好,今天给大家分享一下,如何控制开发板上的蜂鸣器。 第一:开发板原理图 从原理图中可以得出,当引脚输出低电平的时候,对应的蜂鸣器发出响声。 第二:QT代码详细实现 设置一个按钮,点击即可控制BEEP状态发生反转。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#in…

spring的redis注解@Cacheable @Cacheput @CacheEvict的condition、unless

概述 redis的注解使用的过程中总会遇到condition和unless这两个属性&#xff0c;而且不同的注解使用注意事项不一样。本人也是错误使用之后详细查询了一下&#xff0c;作了如下的总结。 Cacheale 这个注解的使用和意义这里不多说&#xff0c;可以查看我的其他文档。这里主要说…

golang 迷宫回溯算法(递归)

// Author sunwenbo // 2024/4/14 20:13 package mainimport "fmt"// 编程一个函数&#xff0c;完成老鼠找出路 // myMap *[8][7]int 地图&#xff0c;保证是同一个地图&#xff0c;因此是引用类型 // i,j表示对地图的哪个点进行测试 func SetWay(myMap *[8][7]int, …