找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 80|回复: 0

检测点8-20

[复制链接]

620

主题

336

回帖

1057

积分

管理员

积分
1057
发表于 2026-3-7 19:47:14 | 显示全部楼层 |阅读模式
检测点8-20

1.在源文件c0824.c中,参数(* iarr3) [x]可以换成iarr3 [x]吗?为什么?可以换成((int *) iarr3) [x]吗?为什么?
答:不可以换成iarr3 [x],因为类型不同。(* iarr3) [x]的类型是int而iarr3 [x]的类型是int [3]。
可以换成((int *) iarr3) [x],因为数组iarr3、数组iarr3的首元素(也是个数组)以及数组iarr3的首元素的首元素起始于同一个内存位置,指向它们的指针类型不同,但数值上是相同的(相同的地址)。 * iarr3和(int *) iarr3数值相同,类型也相同,有些保证就可以了。

2.若数组ac有2个元素,元素的类型是“具有20个char类型的元素的数组”,如果要求用字面串来初始化ac,它该如何声明?
参考答案:
char ac [2] [20] = {"hello", "world"};

3.在下面的程序中,实参* * a和形参p兼容吗?为什么?对于程序中的数组a,表达式(int) a是把数组(的内容或者值)转换为int类型吗?为什么?
void f (int * p)
{
    /*...*/
}

int main (void)
{
    int a [2][3][7] = {0};
    f (* * a);
}
答:匹配。因为a的类型是int [2] [3] [7],自动转换为指针类型int (*) [3] [7]。表达式* a的类型是 int [3] [7],自动转换为指针类型 int (*) [7]。表达式* * a的类型是int  [7],自动转换为指针类型 int *。
(int) a中,a的类型是int [2] [3] [7],自动转换为指针类型int (*) [3] [7],则(int) a是将这个指针类型的值转换为int类型。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2026-3-30 16:13 , Processed in 0.239869 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表