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);