📜  C结构体、共同体、枚举测试3

📅  最后修改于: 2020-10-23 05:53:53             🧑  作者: Mango

C结构体,联合体,枚举测试3

11)以下联合定义的大小是多少?

#include
union xyz { 
    char x,y,z,a,b,c,d,e; 
    int i;
}xyz;
main()
{
   printf( "%d", sizeof( xyz ));
}
  1. 4
  2. 8
  3. 2
  4. 1

正确的选项是(a)。

说明:

Union是C编程中使用的特殊数据类型,它允许将不同的数据类型存储在同一内存位置。

联合的所有元素共享公共内存,联合大小是最大的元素大小。

因此,程序的输出或联合定义的大小为4。

12)以下程序的输出是什么?

#include
main()
{ 
   struct { int y;} var = {4}, *a = &var;
   printf("%d %d %d",var.y,a->y,(*a).y); 
}
  1. 4 4 garbage value
  2. 4 4 0
  3. 4 4 4
  4. Compile error

正确的选项是(c)。

说明:

使用指针访问结构元素的两种可能方法是使用*或->(箭头运算符)。

因此,程序的输出为4 4 4

13)如果一个整数是2个字节宽,一个字符是1个字节宽,一个长整数是4个字节宽,那么下面的结构是否总是占据7个字节?

struct employ
{
    int j;
    char ch;
    long int a;
};
  • Yes
  • No

正确的选项是(b)。

说明:

编译器可以通过在结构中的第一个字符中填充另一个字节来保留结构中的漏洞,以确保整数存储在某个位置。

此外,整数后面还有2个额外的字节,以确保将长整数存储在指定地址(4的倍数)中。

因此,该结构并不总是占据7个字节。

14)在switch-case语句中不能检查哪种数据类型?

  1. enum
  2. character
  3. integer
  4. float

正确的选项是(d)。

说明:

在C语言中,语言规范将switch / casev语句定义为使用int值,因此我们不能在switch / case语句中使用浮点值。

15)在C语言中,允许嵌套联合。

正确的选项是(a)。

说明:

诚然,C语言允许使用嵌套联合。因此,我们可以在C程序的联合内部使用联合。