几个关于C语言的小问题~

来源:百度知道 编辑:UC知道 时间:2024/06/29 02:09:07
6. 设函数fun的定义形式为:void fun ( float x, char ch ) {}
则以下对函数fun的调用语句中,正确的是:
A)fun (6.0, "abc"); B)t = fun (6.5, ’D’); C)fun (42, 42); D)fun (6.5, ’65’);
选项B为什么不对呢?
15. 若有以下说明和定义: union dt { int a; char b; double c; } data; 下面叙述中错误的是:
C)data可以作为函数的实参 D)程序段:data.a=5; printf("%f\n",data.c); 输出结果为5.0
答案是D
我想问的是,如果用data做实参,是直接data还是要data.a这样的形式呢?如果直接data,那么带入的值是abc里面哪一个的?

28. main ( )
{ union { int k; char i[2]; } a, *s = &a ;
s -> i[0] = 0x39; s -> i[1] = 0x38; printf ( " %x \n ", s -> k ) ;
}
A)3839 B)3938 C)380039 D)390038
这题我实在是看不懂……

第6题,注意函数是以 void 定义的,也就是说该函数没有返回值,所以不能作为赋值操作的右操作数(就是不能赋值给任何变量),所以选 B 是错的。

第15题,一、如果以 data 作为实参,那么应该使用 data ,因为以 data 做实参也就是说,你函数定义的形参变量是 union 类型,所以应该用 data 。但是如果,函数形参是 int 类型,那么就应该用 data.a 。这里做实参时,是根据函数定义时参数列表中形参的类型来决定实参到底是什么类型。
二、如果直接使用 data 那么要看你的 data 中到底存储着 a、b、c 中的哪一个,来决定你使用哪一个。譬如,(由于这是一个联合类型),你在 data 中存储着 a ,那么,将 data 传递到函数中后,你只能通过 data.a 来使用 data 中的 a 。对于 b、c 是同样的道理。说白了,就是说把 a、b、c 都带入了,但是根据联合类型数据的特点,你只能使用其中一个。

第28题,这里考察的是联合数据类型存储数据的特点。一个联合数据类型的变量所占空间由各个成员中所占字节数最大的成员决定。由于 int 类型所占字节因机器而异,但是,可以肯定的是,此处 a 所占字节至少是 两个字节(32位机器中就是 四字节)。s -> i[0] = 0x39; s -> i[1] = 0x38;赋值后,使得 a 的最低字节存储 0x39,而倒数第二个字节就存储着 0x38,所以,a 中存储的值实际上就是 0x3839 ,当使用 s->k 输出时,就是强制将 0x3839 存储到 一个 int 类型的数据空间里去,此时的 s->k 可以容纳这里的两个字节,因而输出就是选择 A 了。

6。fun没有返回值,故t=fun(6.5,'D');不正确
15。代入的值是data本身,一个dt类型的值,不是其中的那一个
28。A,用机器试一下就知道了。

15题lz是问c实现时的情况么?看了lz和1l,迷糊了。。