|
|
检测点8-16
1.请用类型名指出对象pc和表达式& a的类型,然后说明它们为什么是兼容的。
答:对象pc的类型是 char (*) []
表达式& a的类型是char (*) [6]
由于char []和char [6]是兼容的,所以指向这两种类型的指针也是兼容的。
2.用类型名写出表达式& "Goodbye Mr Hollywood"的类型。
答:char (*) [21]
3.如果不允许使用条件表达式,则c0819.c中的main函数如何改写?
参考答案:
int main (void)
{
char a [] = "grass";
if (cmp_str (& a, & "tree")) puts ("Same.");
else puts ("Different.");
char (* pc) [] = & a;
if (cmp_str (pc, & "grass")) puts ("Same.");
else puts ("Different.");
}
4.如下所示,我们想改写cmp_str函数,使用数组下标来比较两个字符串,而不是先前的指针操作。对象m和n的值在程序中用作数组下标,请将这个函数补充完整。
bool fstrcmp (char (* para) [], char (* parb) [])
{
int m = 0, n = 0;
while (______________________________________)
if (______________________________________) return 0;
return ________________________;
答案:
bool cmp_str (char (* para) [], char (* parb) [])
{
int m = 0, n = 0;
while ((* para) [m] != '\0' && (* parb) [n] != '\0')
if ((* para) [m ++] != (* parb) [n ++]) return 0;
return (* para) [m] == (* parb) [n];
}
5.5.在本节最后给出了一个新版的cmp_str函数,为了使用这个新版的函数,我们应当如何修改源文件c0819.c里的main函数呢?请给出代码。
参考答案:
int main (void)
{
char a [] = "grass";
puts (cmp_str (a, "tree") ? "Same." : "Different.");
char (* pc) [] = & a;
puts (cmp_str (* pc, "grass") ? "Same." : "Different.");
}
|
|