首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >那些让我“挠头”的计算机难题

那些让我“挠头”的计算机难题

作者头像
用户11991900
发布2026-01-15 10:55:24
发布2026-01-15 10:55:24
770
举报

1.位段(定义宏define的坑)题目1

在这里插入图片描述
在这里插入图片描述

当A=2, B=3时,pointer分配( )个字节的空间。 A.20 B.15 C.11 D.9

题目1解析

要想仔细理解此题目,就要提及位段这个概念。 位段是一种特殊的结构体或联合体成员。

在这里插入图片描述
在这里插入图片描述

位段成员后面所跟的数字是成员所占的大小,以1字节为单位,当成员所占字节满1字节或超过1字节时,将自动使用下一个字节;在这里4+2为6,由于下一个成员所用大小未知,所以下一成员将自己使用1个字节;最后一个成员使用1个字节;

所以该位段占了3个字节;在计算大小时sizeof中所计算的是: 3*2+3:该结果算出来的大小是9 答案显然是: D

错误原因

而在我第一次做这道题时,我默认将2+3看作了一个整体,得出了15的结论。 因此define是一个大坑。

2.sizeof()比较大小时的性质 题目2

在这里插入图片描述
在这里插入图片描述

A.> B.< C.不输出 D.程序有问题

题目解析

要想理清这道题目,首先要知道sizeof()的作用,及其所返回的值; 在进行比较时,由于 sizeof 运算符的结果是 size_t 类型(无符号整数类型),而 i 是 int 类型(有符号整数类型)。 当有符号整数和无符号整数进行比较时,有符号整数会被隐式转换为无符号整数。

错误原因: 全局变量,没有给初始值时,编译其会默认将其初始化为0。

i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B

但是这里sizeof的返回值是无符号整型,i的值-1将会被转化为一个非常大的值,所以条件判断的结果是真,答案应该为A

3.不同指针类型的差别 题目3

在这里插入图片描述
在这里插入图片描述

求此代码所输出的值: A.1 2 3 4 5 B.0 0 3 4 5 C.0 0 0 0 5 D.1 0 0 0 0

题目解析:

该题最大的一个坑是此处的指针p的类型是char *; 想理清该题,就的明白数据在内存中的存储。

由于指针是short* 类型的,一次只能访问2个字节,这就使得第一个循环只能访问的数组的前8个字节,也就是将arr[0]和arr[1]所占据的内存赋值为了0;

在这里插入图片描述
在这里插入图片描述

错误原因

想当然的认为指针类型与所给数组的类型是匹配的,不仔细理解题目而动手操作。

4.strlen()的判断逻辑 题目4

在这里插入图片描述
在这里插入图片描述

A.1000 B.999 C.255 D.256

题目解析

a是字符型数组,strlen找的是第一次出现尾零(即值为0)的位置。 要想让a[]为0,则a[]这个数据所占的内存,即所占的1个字节都要为0; 由于 a[i] = -1 - i,所以想要a[i]等于0,则i要等于255 因为当将-256存入内存中时,存入的数据是低八位,也就是8个0,则a[i]中的数据也就为0了,则strlen读取数据的时候,读取到第255位是就停止了,故答案选C。

错误原因

看到这个题目时,一头雾水,没能明白其考察的核心内容是什么。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.位段(定义宏define的坑)题目1
    • 题目1解析
    • 错误原因
  • 2.sizeof()比较大小时的性质 题目2
    • 题目解析
  • 3.不同指针类型的差别 题目3
    • 题目解析:
    • 错误原因
  • 4.strlen()的判断逻辑 题目4
    • 题目解析
    • 错误原因
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档