当前位置:嗨网首页>书籍在线阅读

11-第10章复习题答案

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

A.10 第10章复习题答案

1.打印的内容如下:

8 8
4 4
0 0
2 2

2.数组 ref 有4个元素,因为初始化列表中的值是4个。

3.数组名 ref 指向该数组的首元素(整数 8 )。表达式 ref + 1 指向该数组的第 2 个元素(整数 4 )。 ++ref 不是有效的表达式,因为 ref 是一个常量,不是变量。

4. ptr 指向第 1 个元素, ptr + 2 指向第 3 个元素(即第 2 行的第 1 个元素)。

a. 1216

b. 1214 (初始化列表中,用花括号把 12 括起来,把 1416 括起来,所以 12 初始化第 1 行的第 1 个元素,而 14 初始化第 2 行的第 1 个元素)。

5. ptr 指向第 1 行, ptr + 1 指向第 2 行。 ptr 指向第 1 行的第 1 个元素,而 (ptr + 1) 指向第 2 行的第 1 个元素。

a. 1216

b. 1214 (同第 4 题, 12 初始化第 1 行的第 1 个元素,而 14 初始化第 2 行的第 1 个元素)。

6.a. &grid[22][56]

b. &grid[22][0]grid[22]

grid[22] 是一个内含 100 个元素的一维数组,因此它就是首元素 grid[22][0] 的地址。)

c. &grid[0][0]grid[0](int * ) grid

grid[0]int 类型元素 grid[0][0] 的地址, grid 是内含 100 个元素的 grid[0] 数组的地址。这两个地址的数值相同,但是类型不同,可以用强制类型转换把它们转换成相同的类型。)

7.a. int digits[10];

b. float rates[6];

c. int mat[3][5];

d. char * psa[20] ;

注意, []的优先级高,所以在没有圆括号的情况下, psa 先与 [20] 结合,然后再与结合。因此该声明与 char * (psa[20]); 相同。

e. char ( * pstr)[20];

注意 对第e小题而言, char * pstr[20]; 不正确。这会让 pstr 成为一个指针数组,而不是一个指向数组的指针。具体地说,如果使用该声明, pstr 就指向一个 char 类型的值(即数组的第1个成员),而 pstr + 1 则指向下一个字节。使用正确的声明, pstr 是一个变量,而不是一个数组名。而且 pstr + 1 指向起始字节后面的第20个字节。

8.a. int sextet[6] = {1, 2, 4, 8, 16, 32};

b. sextet[2]

c. int lots[100] = { [99] = -1};

d. int pots[100] = { [5] = 101, [10] = 101,101, 101, [3]=101};

9. 09

10.a. rootbeer[2] = value; 有效。

b. scanf("%f", &rootbeer ); 无效, rootbeer 不是 float 类型。

c. rootbeer = value; 无效, rootbeer 不是 float 类型。

d. printf("%f", rootbeer); 无效, rootbeer 不是 float 类型。

e. things[4][4] = rootbeer[3]; 有效。

f. things[5] = rootbeer; 无效,不能用数组赋值。

g. pf = value; 无效, value 不是地址。

h. pf = rootbeer; 有效。

11. int screen[800][600] ;

12.a.

void process(double ar[], int n);
void processvla(int n, double ar[n]);
process(trots, 20);
processvla(20, trots);

b.

void process2(short ar2[30], int n);
void process2vla(int n, int m, short ar2[n][m]);
process2(clops, 10);
process2vla(10, 30, clops);

c.

void process3(long ar3[10][15], int n);
void process3vla(int n, int m,int k, long ar3[n][m][k]);
process3(shots, 5);
process3vla(5, 10, 15, shots);

13.a.

show( (int [4]) {8,3,9,2}, 4);

b.

show2( (int [][3]){{8,3,9}, {5,4,1}}, 2);