C语言—每日选择题—Day69

文章讲述了C语言中的几个关键概念,包括二维数组和一维数组的关系、strcpy函数的工作原理、内存对齐规则、枚举类型和联合体的特性,以及malloc内存申请的处理。最后讨论了进程结束时内存的回收情况。
摘要由CSDN通过智能技术生成

第一题

1、以下程序的输出结果是( )

int main()
{
    char arr[2][4];
    strcpy (arr[0],"you");
    strcpy (arr[1],"me");
    arr[0][3]='&';
    printf("%s \n",arr);
    return 0;
}

A: you&me

B: you

C: me

D: err

答案及解析 A

这里重点就在strcpy,arr[0]是数组的行,我们可以认为二维数组就是一维数组的数组

所以二维数组的行就相当于每行的数组名,arr[0] 就是第一行这个数组的数组名

arr[0] [4] 代表的是一个一维的字符数组,相当于char (arr[0]) [4];

那数组名代表首元素地址,strcpy就是从首元素位置开始copy,就如上图那样

所以以此类推,答案为A

第二题

2、如下C程序,在64位处理器上运行后 sz 的值是什么( )

struct st
{
    int *p;
    int i;
    char a;
};
int sz = sizeof(struct st);

A: 12

B: 16

C: 24

D: 13

答案及解析 B

64位机器的指针为8字节

sizeof一个结构体类型,要考虑内存对齐的规则,相关博客:C/C++内存对齐规则(结构体、联合体、类)_clang编译器最大对齐数-CSDN博客

第三题

3、执行以下语句后的输出结果是( )

enum weekday
{
    sun,
    mon = 3,
    tue,
    wed
};
enum weekday workday;
workday = wed;
printf("%d\n",workday);

A: 3

B: 4

C: 5

D: 编译错误

答案及解析 C 

enum为枚举类型,mon赋值了3,那后续的tue和wed会依次递增,所以workday = 5

第四题

4、设有以下定义,则下面叙述中正确的是【多选】( )

union D
{
    int d1;
    float d2;
}d;

A: 变量d与各成员的地址相同

B: d.d1和d.d2具有相同的地址
C: 若给d.d2赋10后,d.d1中的值是10

D: 若给d.d1赋10后,d.d2中的值是10

答案及解析 A B 

AB:union是联合体,其地址空间大小,是最大的那个,共用同一个地址,所以起始位置都相同。

CD:这里浮点数的二进制存储和整数的二进制存储是不同的,所以读取也不同

第五题

5、假设C语言程序里使用 malloc 申请了内存,但是没有 free 掉,那么当该进程被kill之后,操作系统会( )


A: 内存泄露

B: segmentation fault(段错误)

C: core dump(核心转储)

D: 以上都不对

答案及解析 D

不管程序怎么用malloc,在进程结束的时候,程序开辟的内存空间都将会被操作系统回收,不存在泄漏和错误

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终将向阳而生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值