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. 12 和 16 。
b. 12 和 14 (初始化列表中,用花括号把 12 括起来,把 14 和 16 括起来,所以 12 初始化第 1 行的第 1 个元素,而 14 初始化第 2 行的第 1 个元素)。
5. ptr 指向第 1 行, ptr + 1 指向第 2 行。 ptr 指向第 1 行的第 1 个元素,而 (ptr + 1) 指向第 2 行的第 1 个元素。
a. 12 和 16 。
b. 12 和 14 (同第 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. 0 ~ 9
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);