欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C_C笔试题汇总.pdf

    • 资源ID:89820701       资源大小:6.60MB        全文页数:79页
    • 资源格式: PDF        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C_C笔试题汇总.pdf

    最 近 因 为 找 工 作,收 集 了 很 多 C 语 言 方 面 方 面 的 面 试 题 以 及 答 案。现 在 新 工 作 搞 定 了,决 定 把 这 些 资 料 发 出 来,送 给 有 需 要 的 朋 友,免 得 再 象 我 一 样 到 处 搜 寻,实 在 辛 苦。发 布 之 前 先 申 明 两 点:1 所 有 资 料 来 自 网 络(主 要 是 C S D N),本 人 只 是 收 集 和 转 发。2 所 有 问 题 解 答(尤 其 是 代 码)只 是 参 考,不 保 证 正 确。先 发 基 本 问 题,再 发 编 程 问 题.想 成 为 嵌 入 式 程 序 员 应 知 道 的 0 x10个 基 本 问 题:预 处 理 器(Preprocessor)1.用 预 处 理 指 令#define声 明 一 个 常 数,用 以 表 明 1年 中 有 多 少 秒(忽 略 闰 年 问 题)#define SECONDS_PER_YEAR(60*60*24*365)UL我 在 这 想 看 到 儿 件 事 情:1)#define语 法 的 基 本 知 识(例 如:不 能 以 分 号 结 束,括 号 的 使 用,等 等)2)懂 得 预 处 理 器 将 为 你 计 算 常 数 表 达 式 的 值,因 此,直 接 写 出 你 是 如 何 计 算 一 年 中 有 多 少 秒 而 不 是 计 算 出 实 际 的 值,是 更 清 晰 而 没 有 代 价 的。3)意 识 到 这 个 表 达 式 将 使 一 个 16位 机 的 整 型 数 溢 出-因 此 要 用 到 长 整 型 符 号 L,告 诉 编 译 器 这 个 常 数 是 的 长 整 型 数。4)如 果 你 在 你 的 表 达 式 中 用 到 UL(表 示 无 符 号 长 整 型),那 么 你 有 了 一 个 好 的 起 点。记 住,第 一 印 象 很 重 要。2.写 一 个 标 准 宏 MIN,这 个 宏 输 入 两 个 参 数 并 返 回 较 小 的 一 个。#define MIN(A,B)(A)=(B)?(A):(B)这 个 测 试 是 为 卜 面 的 目 的 而 设 的:1)标 识#define在 宏 中 应 用 的 基 本 知 识。这 是 很 重 要 的。因 为 在 嵌 入(inline)操 作 符 变 为 标 准 C 的 一 部 分 之 前,宏 是 方 便 产 生 嵌 入 代 码 的 唯 一 方 法,对 于 嵌 入 式 系 统 来 说,为 了 能 达 到 要 求 的 性 能,嵌 入 代 码 经 常 是 必 须 的 方 法。2)三 重 条 件 操 作 符 的 知 识。这 个 操 作 符 存 在 C 语 言 中 的 原 因 是 它 使 得 编 译 器 能 产 生 比 if-then-else更 优 化 的 代 码,了 解 这 个 用 法 是 很 重 要 的。3)懂 得 在 宏 中 小 心 地 把 参 数 用 括 号 括 起 来 4)我 也 用 这 个 问 题 开 始 讨 论 宏 的 副 作 用,例 如:当 你 写 下 面 的 代 码 时 会 发 生 什 么 事?least=MIN(*p+,b);3.预 处 理 器 标 识#error的 目 的 是 什 么?如 果 你 不 知 道 答 案,请 看 参 考 文 献 1。这 问 题 对 区 分 一 个 正 常 的 伙 计 和 一 个 书 呆 子 是 很 有 用 的。只 有 书 呆 子 才 会 读 C 语 言 课 本 的 附 录 去 找 出 象 这 种 问 题 的 答 案。当 然 如 果 你 不 是 在 找 一 个 书 呆 子,那 么 应 试 者 最 好 希 望 自 己 不 要 知 道 答 案。死 循 环(Infinite loops)4.嵌 入 式 系 统 中 经 常 要 用 到 无 限 循 环,你 怎 么 样 用 C 编 写 死 循 环 呢?这 个 问 题 用 几 个 解 决 方 案。我 首 选 的 方 案 是:while(1)()一 些 程 序 员 更 喜 欢 如 下 方 案:for(;)()这 个 实 现 方 式 让 我 为 难,因 为 这 个 语 法 没 有 确 切 表 达 到 底 怎 么 回 事。如 果 一 个 应 试 者 给 出 这 个 作 为 方 案,我 将 用 这 个 作 为 一 个 机 会 去 探 究 他 们 这 样 做 的 基 本 原 理。如 果 他 们 的 基 本 答 案 是:我 被 教 着 这 样 做,但 从 没 有 想 到 过 为 什 么。”这 会 给 我 留 下 个 坏 印 象。第 三 个 方 案 是 用 gotoLoop:goto Loop;应 试 者 如 给 出 上 面 的 方 案,这 说 明 或 者 他 是 一 个 汇 编 语 言 程 序 员(这 也 许 是 好 事)或 者 他 是 一 个 想 进 入 新 领 域 的 BASIC/FORTRAN程 序 员。数 据 声 明(Data declarations)5.用 变 量 a 给 出 下 面 的 定 义 a)一 个 整 型 数(An integer)b)个 指 向 整 型 数 的 指 针(A pointer to an integer)c)个 指 向 指 针 的 的 指 针,它 指 向 的 指 针 是 指 向 个 整 型 数(A pointer to a pointer to an intege)rd)”个 有 10个 整 型 数 的 数 组(An array of 10 integers)e)个 有 10个 指 针 的 数 组,该 指 针 是 指 向 一 个 整 型 数 的。(An array of 10 pointers to integers)f)个 指 向 有 10个 整 型 数 数 组 的 指 针(A pointer to an array of 10 integers)g)个 指 向 函 数 的 指 针,该 函 数 有 一 个 整 型 参 数 并 返 回 个 整 型 数(A pointer to a function that takes aninteger as an argument and returns an integer)h)一 个 有 10个 指 针 的 数 组,该 指 针 指 向 一 个 函 数,该 函 数 有 一 个 整 型 参 数 并 返 回 一 个 整 型 数(An arrayof ten pointers to functions that take an integer argument and return an integer)答 案 是:a)int a;II An integerb)int*a;/A pointer to an integerc)int*a;/A pointer to a pointer to an integerd)int a10;/An array of 10 integerse)int*a10;/An array of 10 pointers to integersf)int(*a)10;/A pointer to an array of 10 integersg)int(*a)(int);/A pointer to a function a that takes an integer argument and returns an integerh)int(*a10)(int);/An array of 10 pointers to functions that take an integer argument and return aninteger人 们 经 常 声 称 这 里 有 几 个 问 题 是 那 种 要 翻 一 下 书 才 能 回 答 的 问 题,我 同 意 这 种 说 法。当 我 写 这 篇 文 章 时,为 了 确 定 语 法 的 正 确 性,我 的 确 查 了 一 下 书。但 是 当 我 被 面 试 的 时 候,我 期 望 被 问 到 这 个 问 题(或 者 相 近 的 问 题)。因 为 在 被 面 试 的 这 段 时 间 里,我 确 定 我 知 道 这 个 问 题 的 答 案。应 试 者 如 果 不 知 道 所 有 的 答 案(或 至 少 大 部 分 答 案),那 么 也 就 没 有 为 这 次 面 试 做 准 备,如 果 该 面 试 者 没 有 为 这 次 面 试 做 准 备,那 么 他 又 能 为 什 么 出 准 备 呢?Static6.关 键 字 static的 作 用 是 什 么?这 个 简 单 的 问 题 很 少 有 人 能 回 答 完 全。在 C 语 言 中,关 键 字 static有 三 个 明 显 的 作 用:1)在 函 数 体,一 个 被 声 明 为 静 态 的 变 量 在 这 一 函 数 被 调 用 过 程 中 维 持 其 值 不 变。2)在 模 块 内(但 在 函 数 体 外),一 个 被 声 明 为 静 态 的 变 量 可 以 被 模 块 内 所 用 函 数 访 问,但 不 能 被 模 块 外 其 它 函 数 访 问。它 是 一 个 本 地 的 全 局 变 量。3)在 模 块 内,一 个 被 声 明 为 静 态 的 函 数 只 可 被 这 一 模 块 内 的 其 它 函 数 调 用。那 就 是,这 个 函 数 被 限 制 在 声 明 它 的 模 块 的 本 地 范 围 内 使 用。大 多 数 应 试 者 能 正 确 回 答 第 一 部 分,一 部 分 能 正 确 回 答 第 二 部 分,同 是 很 少 的 人 能 懂 得 第 三 部 分。这 是 一 个 应 试 者 的 严 重 的 缺 点,因 为 他 显 然 不 懂 得 本 地 化 数 据 和 代 码 范 围 的 好 处 和 重 要 性。Const7.关 键 字 const有 什 么 含 意?我 只 要 一 听 到 被 面 试 者 说:“const意 味 着 常 数”,我 就 知 道 我 正 在 和 一 个 业 余 者 打 交 道。去 年 Dan S aks己 经 在 他 的 文 章 里 完 全 概 括 了 const的 所 仃 用 法,因 此 ESP(译 者:Embedded Systems Programming)的 每 一 位 读 者 应 该 非 常 熟 悉 const能 做 什 么 和 不 能 做 什 么.如 果 你 从 没 有 读 到 那 篇 文 章,只 要 能 说 出 const意 味 着“只 读”就 可 以 了。尽 管 这 个 答 案 不 是 完 全 的 答 案,但 我 接 受 它 作 为 一 个 正 确 的 答 案。(如 果 你 想 知 道 更 详 细 的 答 案,仔 细 读 一 下 Saks的 文 章 吧。)如 果 应 试 者 能 正 确 回 答 这 个 问 题,我 将 问 他 一 个 附 加 的 问 题:下 面 的 声 明 都 是 什 么 意 思?const int a;int const a;const int*a;int*const a;int const*a const;/*/前 两 个 的 作 用 是 一 样,a 是 一 个 常 整 型 数。第 三 个 意 味 着 a 是 一 个 指 向 常 整 型 数 的 指 针(也 就 是,整 型 数 是 不 可 修 改 的,但 指 针 可 以)。第 四 个 意 思 a 是 一 个 指 向 整 型 数 的 常 指 针(也 就 是 说,指 针 指 向 的 整 型 数 是 可 以 修 改 的,但 指 针 是 不 可 修 改 的)。最 后 一 个 意 味 着 a 是 一 个 指 向 常 整 型 数 的 常 指 针(也 就 是 说,指 针 指 向 的 整 型 数 是 不 可 修 改 的,同 时 指 针 也 是 不 可 修 改 的)。如 果 应 试 者 能 正 确 回 答 这 些 问 题,那 么 他 就 给 我 留 下 了 一 个 好 印 象。顺 带 提 一 句,也 许 你 可 能 会 问,即 使 不 用 关 键 字 c o n s t,也 还 是 能 很 容 易 写 出 功 能 正 确 的 程 序,那 么 我 为 什 么 还 要 如 此 看 重 关 键 字 const呢?我 也 如 下 的 几 下 理 由:1)关 键 字 const的 作 用 是 为 给 读 你 代 码 的 人 传 达 非 常 有 用 的 信 息,实 际 上,声 明 一 个 参 数 为 常 量 是 为 了 告 诉 了 用 户 这 个 参 数 的 应 用 目 的。如 果 你 曾 花 很 多 时 间 清 理 其 它 人 留 下 的 垃 圾,你 就 会 很 快 学 会 感 谢 这 点 多 余 的 信 息。(当 然,懂 得 用 const的 程 序 员 很 少 会 留 下 的 垃 圾 让 别 人 来 清 理 的。)2)通 过 给 优 化 器 一 些 附 加 的 信 息,使 用 关 键 字 const也 许 能 产 生 更 紧 凑 的 代 码。3)合 理 地 使 用 关 键 字 const可 以 使 编 译 器 很 自 然 地 保 护 那 些 不 希 望 被 改 变 的 参 数,防 止 其 被 无 意 的 代 码 修 改。简 而 言 之,这 样 可 以 减 少 b u g的 出 现。Volatile8.关 键 字 volatile有 什 么 含 意?并 给 出 三 个 不 同 的 例 子。一 个 定 义 为 volatile的 变 量 是 说 这 变 量 可 能 会 被 意 想 不 到 地 改 变,这 样,编 译 器 就 不 会 去 假 设 这 个 变 量 的 值 了。精 确 地 说 就 是,优 化 器 在 用 到 这 个 变 量 时 必 须 每 次 都 小 心 地 重 新 读 取 这 个 变 量 的 值,而 不 是 使 用 保 存 在 寄 存 器 里 的 备 份。下 面 是 volatile变 量 的 几 个 例 子:1)并 行 设 备 的 硬 件 寄 存 器(如:状 态 寄 存 器)2)一 个 中 断 服 务 子 程 序 中 会 访 问 到 的 非 自 动 变 量(Non-automaticvariables)3)多 线 程 应 用 中 被 儿 个 任 务 共 享 的 变 量 回 答 不 出 这 个 问 题 的 人 是 不 会 被 雇 佣 的。我 认 为 这 是 区 分 C 程 序 员 和 嵌 入 式 系 统 程 序 员 的 最 基 本 的 问 题。搞 嵌 入 式 的 家 伙 们 经 常 同 硬 件、中 断、RTOS等 等 打 交 道,所 有 这 些 都 要 求 用 到 volatile变 量。不 懂 得 volatile的 内 容 将 会 带 来 灾 难。假 设 被 面 试 者 正 确 地 回 答 了 这 是 问 题(嗯,怀 疑 是 否 会 是 这 样),我 将 稍 微 深 究 一 下,看 吓 这 家 伙 是 不 是 直 正 懂 得 volatile完 全 的 重 要 性。1)一 个 参 数 既 可 以 是 const还 可 以 是 volatile吗?解 释 为 什 么。2);一 个 指 针 可 以 是 vo la tile吗?解 释 为 什 么。3);卜 一 面 的 函 数 有 什 么 错 误:int square(volatile int*ptr)(return*ptr*ptr;)下 面 是 答 案:1)是 的。个 例 子 是 只 读 的 状 态 寄 存 器。它 是 volatile因 为 它 可 能 被 意 想 不 到 地 改 变。它 是 const因 为 程 序 不 应 该 试 图 去 修 改 它。2);是 的。尽 管 这 并 不 很 常 见。一 个 例 子 是 当 一 个 中 服 务 子 程 序 修 该 一 个 指 向 一 个 buffer的 指 针 时。3)这 段 代 码 有 点 变 态。这 段 代 码 的 目 的 是 用 来 返 指 针*ptr指 向 值 的 平 方,但 是,由 于*ptr指 向 一 个 volatile型 参 数,编 译 器 将 产 生 类 似 卜 面 的 代 码:int square(volatile int*ptr)(int a,b;a=*ptr;b=*ptr;return a*b;)由 于*p tr的 值 可 能 被 意 想 不 到 地 该 变,因 此 a 和 b 可 能 是 不 同 的。结 果,这 段 代 码 可 能 返 不 是 你 所 期 望 的 平 方 值!正 确 的 代 码 如 下:long square(volatile int*ptr)(int a;a=*ptr;return a*a;)位 操 作(Bit manipulation)9.嵌 入 式 系 统 总 是 要 用 户 对 变 量 或 寄 存 器 进 行 位 操 作。给 定 一 个 整 型 变 量 a,写 两 段 代 码,第 一 个 设 置 a的 b it 3,第 二 个 清 除 a 的 bit3。在 以 上 两 个 操 作 中,要 保 持 其 它 位 不 变。对 这 个 问 题 有 三 种 基 本 的 反 应 1)不 知 道 如 何 下 手。该 被 面 者 从 没 做 过 任 何 嵌 入 式 系 统 的 工 作。2)用 bit fields。Bit fields是 被 扔 到 C语 言 死 角 的 东 西,它 保 证 你 的 代 码 在 不 同 编 译 器 之 间 是 不 可 移 植 的,同 时 也 保 证 了 的 你 的 代 码 是 不 可 重 用 的。我 最 近 不 幸 看 到 I崎 neon为 其 较 复 杂 的 通 信 芯 片 写 的 驱 动 程 序,它 用 到 了 bit fields因 此 完 全 对 我 无 用,因 为 我 的 编 译 器 用 其 它 的 方 式 来 实 现 bit fields的。从 道 德 讲:永 远 不 要 让 一 个 非 嵌 入 式 的 家 伙 粘 实 际 硬 件 的 边。3)用#defines和 bit masks操 作。这 是 一 个 有 极 高 可 移 植 性 的 方 法,是 应 该 被 用 到 的 方 法。最 佳 的 解 决 方 案 如 下:#define BIT3(0 x1 3)static int a;void set_bit3(void)a|=BIT3;)void clear_bit3(void)a&=-BIT3;)一 些 人 喜 欢 为 设 置 和 清 除 值 而 定 义 一 个 掩 码 同 时 定 义 一 些 说 明 常 数,这 也 是 可 以 接 受 的。我 希 望 看 到 几 个 要 点:说 明 常 数、|=和&=操 作。访 问 固 定 的 内 存 位 置(Accessing fixed memory locations)1 0.嵌 入 式 系 统 经 常 具 有 要 求 程 序 员 去 访 问 某 特 定 的 内 存 位 置 的 特 点。在 某 工 程 中,要 求 设 置 绝 对 地 址 为 0 x67a9的 整 型 变 量 的 值 为 0 xaa66。编 译 器 是 个 纯 粹 的 ANSI编 译 器。写 代 码 去 完 成 这 任 务。这 一 问 题 测 试 你 是 否 知 道 为 了 访 问 一 绝 对 地 址 把 一 个 整 型 数 强 制 转 换(typecast)为 一 指 针 是 合 法 的。这 问 题 的 实 现 方 式 随 着 个 人 风 格 不 同 而 不 同。典 型 的 类 似 代 码 如 下:int*ptr;ptr=(int*)0 x67a9;*ptr=0 xaa55;A more obscure approach is:一 个 较 晦 涩 的 方 法 是:*(int*const)(0 x67a9)=0 xaa55;即 使 你 的 品 味 更 接 近 第 二 种 方 案,但 我 建 议 你 在 面 试 时 使 用 第 种 方 案。中 断(Interrupts)1 1.中 断 是 嵌 入 式 系 统 中 重 要 的 组 成 部 分,这 导 致 了 很 多 编 译 开 发 商 提 供 种 扩 展 一 让 标 准 C 支 持 中 断。具 代 表 事 实 是,产 生 了 个 新 的 关 键 字 interrupt。下 面 的 代 码 就 使 用 了 interrupt关 键 字 去 定 义 了 个 中 断 服 务 子 程 序(IS R),清 评 论 一 下 这 段 代 码 的。_ interrupt double compute_area(double radius)(double area=PI*radius*radius;printf(/nArea=%f,area);return area;)这 个 函 数 有 太 多 的 错 误 了,以 至 让 人 不 知 从 何 说 起 了:1)IS R不 能 返 回 个 值。如 果 你 不 懂 这 个,那 么 你 不 会 被 雇 用 的。2)IS R不 能 传 递 参 数。如 果 你 没 有 看 到 这 点,你 被 雇 用 的 机 会 等 同 第 一 项。3)在 许 多 的 处 理 器/编 译 器 中,浮 点 一 般 都 是 不 可 重 入 的。有 些 处 理 器/编 译 器 需 要 让 额 处 的 寄 存 器 入 栈,有 些 处 理 器/编 译 器 就 是 不 允 许 在 ISR中 做 浮 点 运 算。此 外,ISR应 该 是 短 而 有 效 率 的,在 ISR中 做 浮 点 运 算 是 不 明 智 的。4)与 第 三 点 一 脉 相 承,printf()经 常 有 重 入 和 性 能 上 的 问 题。如 果 你 丢 掉 了 第 三 和 第 四 点,我 不 会 太 为 难 你 的。不 用 说,如 果 你 能 得 到 后 两 点,那 么 你 的 被 雇 用 前 景 越 来 越 光 明 了。代 码 例 子(Code examples)12.卜 面 的 代 码 输 出 是 什 么,为 什 么?void foo(void)(unsigned int a=6;int b=-20;(a+b 6)?puts(6):puts(6 原 因 是 当 表 达 式 中 存 在 有 符 号 类 型 和 无 符 号 类 型 时 所 有 的 操 作 数 都 自 动 转 换 为 无 符 号 类 型。因 此-20变 成 了 一 个 非 常 大 的 正 整 数,所 以 该 表 达 式 计 算 出 的 结 果 大 于 6。这 一 点 对 于 应 当 频 繁 用 到 无 符 号 数 据 类 型 的 嵌 入 式 系 统 来 说 是 丰 常 重 要 的。如 果 你 答 错 了 这 个 问 题,你 也 就 到 了 得 不 到 这 份 工 作 的 边 缘。13.评 价 下 面 的 代 码 片 断:unsigned int zero=0;unsigned int compzero=OxFFFF;/*1s complement of zero*/对 于 一 个 in t型 不 是 16位 的 处 理 器 为 说,上 面 的 代 码 是 不 正 确 的。应 编 写 如 下:unsigned int compzero=0;这 问 题 真 正 能 揭 露 出 应 试 者 是 否 懂 得 处 理 器 字 长 的 重 要 性。在 我 的 经 验 里,好 的 嵌 入 式 程 序 员 非 常 准 确 地 明 臼 硬 件 的 细 节 和 它 的 局 限,然 而 PC机 程 序 往 往 把 硬 件 作 为 个 无 法 避 免 的 烦 恼。到 了 这 个 阶 段,应 试 者 或 者 完 全 垂 头 丧 气 了 或 者 信 心 满 满 志 在 必 得。如 果 显 然 应 试 者 不 是 很 好,那 么 这 个 测 试 就 在 这 里 结 束 了。但 如 果 显 然 应 试 者 做 得 不 错,那 么 我 就 扔 出 下 面 的 追 加 问 题,这 些 问 题 是 比 较 难 的,我 想 仅 仅 非 常 优 秀 的 应 试 者 能 做 得 不 错、提 出 这 些 问 题,我 希 望 更 多 看 到 应 试 者 应 付 问 题 的 方 法,而 不 是 答 案。不 管 如 何,你 就 当 是 这 个 娱 乐 吧 动 态 内 存 分 配(Dynamic memory allocation)14.尽 管 不 像 非 嵌 入 式 计 算 机 那 么 常 见,嵌 入 式 系 统 还 是 有 从 堆(h e a p)中 动 态 分 配 内 存 的 过 程 的。那 么 嵌 入 式 系 统 中,动 态 分 配 内 存 可 能 发 生 的 问 题 是 什 么?这 里,我 期 望 应 试 者 能 提 到 内 存 碎 片,碎 片 收 集 的 问 题,变 量 的 持 行 时 间 等 等。这 个 主 题 已 经 在 ESP杂 志 中 被 广 泛 地 讨 论 过 了(主 要 是 P.J.Plauger,他 的 解 释 远 远 超 过 我 这 里 能 提 到 的 任 何 解 释),所 有 回 过 头看 一 卜 这 些 杂 志 吧!让 应 试 者 进 入 一 种 虚 假 的 安 全 感 觉 后,我 拿 出 这 么 一 个 小 节 目:下 面 的 代 码 片 段 的 输 出 是 什 么,为 什 么?char*ptr;if(ptr=(char*)malloc(0)=NULL)puts(Got a null pointer*);elseputs(HGot a valid pointer);这 是 一 个 有 趣 的 问 题。最 近 在 我 的 一 个 同 事 不 经 意 把 0值 传 给 了 函 数 malloc,得 到 了 一 个 合 法 的 指 针 之 后,我 才 想 到 这 个 问 题。这 就 是 上 面 的 代 码,该 代 码 的 输 出 是“Got a valid pointer。我 用 这 个 来 开 始 讨 论 这 样 的 一 问 题,看 看 被 面 试 者 是 否 想 到 库 例 程 这 样 做 是 正 确。得 到 正 确 的 答 案 固 然 重 要,但 解 决 问 题 的 方 法 和 你 做 决 定 的 范 本 原 理 更 重 要 些。Typedef15Typedef在 C语 言 中 频 繁 用 以 声 明 一 个 已 经 存 在 的 数 据 类 型 的 同 义 字。也 可 以 用 预 处 理 器 做 类 似 的 事。例 如,思 考 一 下 下 面 的 例 子:#define dPS struct s*typedef struct s*tPS;以 上 两 种 情 况 的 意 图 都 是 要 定 义 d P S和 tP S作 为 一 个 指 向 结 构 s指 针。哪 种 方 法 更 好 呢?(如 果 有 的 话)为 什 么?这 是 一 个 非 常 微 妙 的 问 题,任 何 人 答 对 这 个 问 题(正 当 的 原 因)是 应 当 被 恭 喜 的。答 案 是:typedef更 好。思 考 卜.面 的 例 子:dPSp1,p2;tPS p3,p4;第 一 个 扩 展 为 struct s*p1,p2;上 面 的 代 码 定 义 p 1为 一 个 指 向 结 构 的 指,p 2为 一 个 实 际 的 结 构,这 也 许 不 是 你 想 要 的。第 二 个 例 子 正 确 地 定 义 了 p 3和 p 4两 个 指 针。晦 涩 的 语 法 16.C语 言 同 意 一 些 令 人 震 惊 的 结 构,卜 面 的 结 构 是 合 法 的 吗,如 果 是 它 做 些 什 么?int a=5,b=7,c;c=a+b;这 个 问 题 将 做 为 这 个 测 验 的 一 个 愉 快 的 结 尾。不 管 你 相 不 相 信,上 面 的 例 子 是 完 全 合 乎 语 法 的。问 题 是 编 译 器 如 何 处 理 它?水 平 不 高 的 编 译 作 者 实 际 上 会 争 论 这 个 问 题,根 据 最 处 理 原 则,编 译 器 应 当 能 处 理 尽 可 能 所 有 合 法 的 用 法。因 此,上 面 的 代 码 被 处 理 成:c=a+b;因 此,这 段 代 码 持 行 后 a=6,b=7,c=12o如 果 你 知 道 答 案,或 猜 出 正 确 答 案,做 得 好。如 果 你 不 知 道 答 案,我 也 不 把 这 个 当 作 问 题。我 发 现 这 个 问 题 的 最 大 好 处 是 这 是 一 个 关 于 代 码 编 写 风 格,代 码 的 可 读 性,代 码 的 可 修 改 性 的 好 的 话 题。华 为 笔 试 题 1.写 出 判 断 ABCD四 个 表 达 式 的 是 否 正 确,若 正 确,写 出 经 过 表 达 式 中 a 的 值(3分)int a=4;(A)a+=(a+);(B)a+=(+a);(C)(a+)+=a;(D)(+a)+=(a+);a=?答:C 错 误,左 侧 不 是 一 个 有 效 变 量,不 能 赋 值,可 改 为(+a)+二 a;改 后 答 案 依 次 为 9,10,10,112.某 32位 系 统 下,C+程 序,请 计 算 sizeof的 值(5分).char str=http:w tr;intn=10;请 计 算 sizeof(str)=?(1)sizeof(p)=?(2)sizeof(n)=?(3)void Foo(char str100)请 计 算 sizeof(s tr)=?(4)void*p=malloc(100);请 计 算 sizeof(p)=?(5)答:(1)17(2)4(3)4(4)4(5)43.回 答 下 面 的 问 题.(4 分)(1).头 文 件 中 的 ifndef/define/endif干 什 么 用?预 处 理 答:防 止 头 文 件 被 重 复 引 用(2).#include 和#include afilename.hw 有 什 么 区 别?答:前 者 用 来 包 含 开 发 环 境 提 供 的 库 头 文 件,后 者 用 来 包 含 自 己 编 写 的 头 文 件。(3).在 C+程 序 中 调 用 被 C 编 译 器 编 译 后 的 函 数,为 什 么 要 加 extern“C”声 明?答:函 数 和 变 量 被 C+编 译 后 在 符 号 库 中 的 名 字 与 C 语 言 的 不 同,被 extern 修 饰 的 变 量 和 函 数 是 按 照 C 语 言 方 式 编 译 和 连 接 的。由 于 编 译 后 的 名 字 不 同,C+程 序 不 能 直 接 调用 C 函 数。C+提 供 了 一 个 C 连 接 交 换 指 定 符 号 extern“C”来 解 决 这 个 问 题.(4).switch。中 不 允 许 的 数 据 类 型 是?答:实 型 4.回 答 下 面 的 问 题(6分)(1).Void GetMemory(char*p,int num)*p=(char*)malloc(num);)void Test(void)char*str=NULL;GetMemory(&str,100);strcpy(str,hello);printf(str);)请 问 运 行 T e s t函 数 会 有 什 么 样 的 结 果?答:输 出“hello”(2).void Test(void)char*str=(char*)malloc(100);strcpy(str,hello);free(str);if(str!=NULL)strcpy(str,uworldM);printf(str);)请 问 运 行 T e s t函 数 会 有 什 么 样 的 结 果?答:输 出“world”(3).char*GetMemory(void)char pO=hello world;return p;)void Test(void)char*str=NULL;str=GetMemory();printf(str);)请 问 运 行 T e s t函 数 会 有 什 么 样 的 结 果?答:无 效 的 指 针,输 出 不 确 定 5.编 写 strcat函 数(6分)已 知 strcat 函 数 的 原 型 是 char*strcat(char*strDest,const char*strSrc);其 中 strDest是 目 的 字 符 串,strS rc是 源 字 符 串。(1)不 调 用 C+/C的 字 符 串 库 函 数,请 编 写 函 数 strcat答:V C源 码:char*_ cdecl strcat(char*dst,const char*src)(char*cp=dst;while(*cp)cp+;/*find end of dst*/while(*cp+=*src+);/*Copy src to end of dst*/return(d s t);/*return dst*/)(2)strcat能 把 s trS rc的 内 容 连 接 到 s trD e s t,为 什 么 还 要 c h a r*类 型 的 返 回 值?答:方 便 赋 值 给 其 他 变 量 6.M FC中 CString是 类 型 安 全 类 么?答:不 是,其 它 数 据 类 型 转 换 到 CString可 以 使 用 CString的 成 员 函 数 Format来 转 换 7.C+中 为 什 么 用 模 板 类。答:(1)可 用 来 创 建 动 态 增 长 和 减 小 的 数 据 结 构(2)它 是 类 型 无 关 的,因 此 具 有 很 高 的 可 复 用 性。(3)它 在 编 译 时 而 不 是 运 行 时 检 查 数 据 类 型,保 证 了 类 型 安 全(4)它 是 平 台 无 关 的,可 移 植 性(5)可 用 于 基 本 数 据 类 型 8.CSingleLock是 干 什 么 的。答:同 步 多 个 线 程 对 一 个 数 据 类 的 同 时 访 问 9.NEWTEXTMETRIC 是 什 么。答:物 理 字 体 结 构,用 来 设 置 字 体 的 高 宽 大 小 10.程 序 什 么 时 候 应 该 使 用 线 程,什 么 时 候 单 线 程 效 率 高。答:1.耗 时 的 操 作 使 用 线 程,提 高 应 用 程 序 响 应 2.并 行 操 作 时 使 用 线 程,如 C/S架 构 的 服 务 器 端 并 发 线 程 响 应 用 户 的 清 求。3.多 C P U系 统 中,使 用 线 程 提 高 C PU利 用 率 4.改 善 程 序 结 构。一 个 既 长 又 复 杂 的 进 程 可 以 考 虑 分 为 多 个 线 程,成 为 几 个 独 立 或 半 独 立 的 运 行 部 分,这 样 的 程 序 会 利 于 理 解 和 修 改。其 他 情 况 都 使 用 单 线 程。11.Windows是 内 核 级 线 程 么。答:见 下 一 题 12.Linux有 内 核 级 线 程 么。答:线 程 通 常 被 定 义 为 一 个 进 程 中 代 码 的 不 同 执 行 路 线。从 实 现 方 式 上 划 分,线 程 有 两 种 类 型:用 户 级 线 程”和“内 核 级 线 程”。用 户 线 程 指 不 需 耍 内 核 支 持 而 在 用 户 程 序中 实 现 的 线 程,其 不 依 赖 于 操 作 系 统 核 心,应 用 进 程 利 用 线 程 库 提 供 创 建、同 步、调 度 和 管 理 线 程 的 函 数 来 控 制 用 户 线 程。这 种 线 程 甚 至 在 象 D O S这 样 的 操 作 系 统 中 也 可 实 现,但 线 程 的 调 度 需 要 用 户 程 序 完 成,这 有 些 类 似 Windows 3.x的 协 作 式 多 任 务。另 外 一 种 则 需

    注意事项

    本文(C_C笔试题汇总.pdf)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开