-
给出下面术语的定义:指针、数组、记录
- 指针:存储内存地址的变量
- 数组:数组是单类数据的集合
- 记录:具有不同类型数据的集合
-
怎样定义一个枚举类型,类型名是polygonT,包含元素Triangle、Square、Pentagon、Hexagon和Octagon?怎样改动这个定义,使得每个图形都对应它们相应的边数?
typedef enum { Triangle = 3, Square, Pentagon, Hexagon, Octagon = 8 } polygonT;
-
定义枚举类型可以实现和用#define一样的作用,本文列出了3种使用枚举类型的好处,这些优点是什么?
- 程序员不用显示地指定内部编码;
- 同类型不同名称可以使得程序易读,因为声明变量时可以使用更有意义地类型名称替代简单的int等;
- 在很多系统中,使用枚举类型的程序更易调试,因为枚举变量由编译器处理,可以调试。
-
正误判断:在C语言中,可以将在整数上定义的任何运算应用于任何标量类型的值
- 正确
-
下面的程序很像本章2.1.2小节“标量类型”中定义的RightFrom函数,但是RightFrom函数可以正常地工作,而这个程序有一些小问题。确认问题出在何处,重写该函数,以便它能正确的计算dir偏左90°的罗盘方向。
directionT LeftFrom(directionT dir) { return ((dir - 1) % 4); }
- 修改
directionT LeftFrom(directionT dir) { return ((dir - 1 + 4) % 4); }
-
用自己的语言,解释如何使用关键字typedef
- typedef重命名已有的数据为一个类型名,typedef typename newtypename;
-
给出下面术语的定义:位、字节、字、地址
- 位:计算机的最小单元存储,能记录一个0或1;
- 字节:现代计算机中一般用8位表示一个字节,它可以表示一个字符类型;
- 字:字的大小不固定,但它一定能表示该计算机上一个int类型的数据,有些计算机用双字节 int = 16bit,有些计算机用四字节 int = 32bit;
- 地址:每一个字节的在内存中的位置的标识编码。
-
正误判断:在C语言中,int型通常占用4个字节空间
- 错:根据机器和编译器决定,32位机器下一般是4个字节。
-
正误判断:在C语言中,char型变量通常占用1个字节
- 对:C语言标准中的确规定了char的内存占用为1字节
-
运算符sizeof的作用是什么?怎样使用它?
- sizeof运算符用来查看一个变量或类型占用多大的内存空间,它只有一个操作数,操作数为类型名或变量或表达式,如果是类型名和变量,sizeof返回类型或变量所占内存数,如果是表达式,sizeof返回该表达式的值所占的字节数。
- 注意:sizeof在编译时就计算大小,运行时sizeof运算符的位置将被常量替代。
-
本章指出使用指针的4个原因是什么?
- 指针可以以一种简洁的方式访问一个大的数据结构;
- 指针可以使程序不同部分间的数据共享更方便;
- 指针可以在程序执行时留出内存空间;
- 指针可以记录各数据项之间的关系。
-
什么是左值?
- 任何引用能存储数据的内存的表达式被称为左值。
-
下列声明生成的变量类型是什么?int *p1, p2;
- p1是指向int型的指针变量,p2是int型变量
-
如何声明一个指向布尔类型的名为pFag的变量?
- bool* pFag;
-
指针的两个基本运算是什么?哪一个是取值运算?
- &,取址运算;*,取值运算
-
解释一下指针赋值与普通赋值之间的差别?
- 指针赋值需要先使用取值运算得到内存,然后再赋值;
- 普通赋值直接运用变量名赋值。
-
略。
-
常量NULL的内部表示是什么?
- 是地址值0,NULL再stdlib.h中定义
-
引用调用是什么意思?
- 引用调用是指再函数参数中传递指针,使得这个函数可以访问实际参数。
-
为下列数组变量写出数组声明
- 数组realArray包括100个浮点型元素: float realArray[100];
- 数组inUse包括16个布尔型元素: bool inUse[16];
- 数组lines可以容下1000个字符串: string lines[1000];
-
写出用于创建和初始化下列整数数组的变量声明和for循环;
int square[10]; for (int i=0; i<10; i++) { square[i] = i * i; }
-
分配空间和利用空间的区别是什么?
- 分配空间指声明数组时,指明的我们数组包含的元素个数;
- 利用空间指这个数组实际用到的元素个数。
-
略。
-
略。
-
假设intArray声明如下:int intArray[10]; j是一个整型变量,描述计算机得到下面表达式值得过程:&intArray[j+3];
- 首先计算j + 3的值;
- 根据值的大小乘以数组类型的大小找到 intArray基地址 + 类型大小 * (j + 3)的元素地址;
- 取得元素值。
-
如果arr被声明为一个数组,描述下列表达式:arr[2]和arr+2之间的区别 *
-
假设double型变量在您当前使用的计算机上占用8个字节。如果数组doubleArray起始位置是1000,那么doubleArray+5的地址是多少?
- doubleArray + 5 = 1000 + 5 * 8 = 1040;
-
正误判断:如果p是一个指针变量,表达式p++表示把p所指数据加1
- 错,p++表示指针移向下一项,下一项的地址根据指针类型有所变化。
-
声明一个记录变量的步骤是什么?
- 定义记录类型;
- 声明记录变量。
-
如果变量p被定义为一个指向记录的指针,这个记录有一个字段cost,下面表达式表示对指针p取值,然后选择该值的cost字段,有何不对?在C语言中,如何表达这种取值和选择的操作?*p.cost
- .操作符的优先级高于*符号,所以表达的意思有问题;
- 使用->操作符表达相应意思。
-
什么是堆?
- 堆是可以被动态分配的内存,但是堆内存被申请后需要被显示指定释放。
-
类型void* 的作用是什么?
- void* 用于接收任意类型的地址值,但不能直接被取值使用。
-
略。
-
什么是“垃圾回收”?
- 在一些编程语言中,提供处理动态分配内存的系统,该系统检查内存,保留那些还在使用的空间,释放一些不再使用的内存,这种策略就叫垃圾回收。