《c语言经典面试题2.pdf》由会员分享,可在线阅读,更多相关《c语言经典面试题2.pdf(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C 语 言 面 试 题 大 汇 总 之 华 为 面 试 题 1、局 部 变 量 能 否 和 全 局 变 量 重 名?答:能,局 部 会 屏 蔽 全 局。要 用 全 局 变 量,需 要 使 用”:;局 部 变 量 可 以 与 全 局 变 量 同 名,在 函 数 内 引 用 这 个 变 量 时,会 用 到 同 名 的 局 部 变 量,而 不 会 用 到 全 局 变 量。对 于 有 些 编 译 器 而 言,在 同 一 个 函 数 内 可 以 定 义 多 个 同 名 的 局 部 变 量,比 如 在 两 个 循 环 体 内 都 定 义 一 个 同 名 的 局 部 变 量,而 那 个 局 部 变 量 的
2、作 用 域 就 在 那 个 循 环 体 内。2、如 何 引 用 一 个 已 经 定 义 过 的 全 局 变 量?答:extern可 以 用 引 用 头 文 件 的 方 式,也 可 以 用 extern关 键 字,如 果 用 引 用 头 文 件 方 式 来 引 用 某 个 在 头 文 件 中 声 明 的 全 局 变 量,假 定 你 将 那 个 编 写 错 了,那 么 在 编 译 期 间 会 报 错,如 果 你 用 extern方 式 引 用 时 一,假 定 你 犯 了 同 样 的 错 误,那 么 在 编 译 期 间 不 会 报 错,而 在 连 接 期 间 报 错。3、全 局 变 量 可 不 可
3、以 定 义 在 可 被 多 个.C文 件 包 含 的 头 文 件 中?为 什 么?答:可 以,在 不 同 的 C 文 件 中 以 static形 式 来 声 明 同 名 全 局 变 量。可 以 在 不 同 的 C 文 件 中 声 明 同 名 的 全 局 变 量,前 提 是 其 中 只 能 有 一 个 C 文 件 中 对 此 变 量 赋 初 值,此 时 连 接 不 会 出 错.4、请 写 出 下 列 代 码 的 输 出 内 容#include int main(void)(int a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(b,c,d:%d,%d,%d,b,c,d
4、);return 0;)答:10,12,1205、static全 局 变 量 与 普 通 的 全 局 变 量 有 什 么 区 别?static局 部 变 量 和 普 通 局 部 变 量 有 什 么 区 别?static函 数 与 普 通 函 数 有 什 么 区 别?答:1)全 局 变 量(外 部 变 量)的 说 明 之 前 再 冠 以 static就 构 成 了 静 态 的 全 局 变 量。全 局 变 量 本 身 就 是 静 态 存 储 方 式,静 态 全 局 变 量 当 然 也 是 静 态 存 储 方 式。这 两 者 在 存 储 方 式 上 并 无 不 同。这 两 者 的 区 别 在 于 非
5、 静 态 全 局 变 量 的 作 用 域 是 整 个 源 程 序,当 一 个 源 程 序 由 多 个 源 文 件 组 成 时,非 静 态 的 全 局 变 量 在 各 个 源 文 件 中 都 是 有 效 的。而 静 态 全 局 变 量 则 限 制 了 其 作 用 域,即 只 在 定 义 该 变 量 的 源 文 件 内 有 效,在 同 一 源 程 序 的 其 它 源 文 件 中 不 能 使 用 它。由 于 静 态 全 局 变 量 的 作 用 域 局 限 于 一 个 源 文 件 内,只 能 为 该 源 文 件 内 的 函 数 公 用,因 此 可 以 避 免 在 其 它 源 文 件 中 引 起 错 误
6、。2)从 以 上 分 析 可 以 看 出,把 局 部 变 量 改 变 为 静 态 变 量 后 是 改 变 了 它 的 存 储 方 式 即 改 变 了 它 的 生 存 期。把 全 局 变 量 改 变 为 静 态 变 量 后 是 改 变 了 它 的 作 用 域,限 制 了 它 的 使 用 范 围。3)static函 数 与 普 通 函 数 作 用 域 不 同,仅 在 本 文 件。只 在 当 前 源 文 件 中 使 用 的 函 数 应 该 说 明 为 内 部 函 数(static),内 部 函 数 应 该 在 当 前 源 文 件 中 说 明 和 定 义。对 于 可 在 当 前 源 文 件 以 外 使
7、 用 的 函 数,应 该 在 一 个 头 文 件 中 说 明,要 使 用 这 些 函 数 的 源 文 件 要 包 含 这 个 头 文 件综 上 所 述:static全 局 变 量 与 普 通 的 全 局 变 量 有 什 么 区 别:static全 局 变 量 只 初 使 化 一 次,防 止 在 其 他 文 件 单 元 中 被 引 用;static局 部 变 量 和 普 通 局 部 变 量 有 什 么 区 别:static局 部 变 量 只 被 初 始 化 一 次,下 一 次 依 据 上 一 次 结 果 值;static函 数 与 普 通 函 数 有 什 么 区 别:static函 数 在 内
8、存 中 只 有 一 份,普 通 函 数 在 每 个 被 调 用 中 维 持 一 份 拷 贝 6、程 序 的 局 部 变 量 存 在 于(堆 栈)中,全 局 变 量 存 在 于(静 态 区)中,动 态 申 请 数 据 存 在 于(堆)中。7、设 有 以 下 说 明 和 定 义:typedef union(long i;int k5;char c;DATE;struct data(int cat;DATE cow;double dog;too;DATE max;则 语 句 printf(%d,sizeof(struct data)+sizeof(max);的 执 行 结 果 是:52考 点:区 别
9、 struct与 union.(一 般 假 定 在 3 2位 机 器 上)答:DATE是 一 个 u n io n,变 量 公 用 空 间.里 面 最 大 的 变 量 类 型 是 in t5,占 用 2 0个 字 节.所 以 它 的 大 小 是 20.d ata是 一 个 struct,每 个 变 量 分 开 占 用 空 间.依 次 为 int4+DATE20+double8=3 2.所 以 结 果 是 20+32=52.当 然 在 某 些 1 6位 编 辑 器 下,in t可 能 是 2 字 节,那 么 结 果 是 int2+DATE 10+double8=208、队 列 和 栈 有 什 么
10、 区 别?队 列 先 进 先 出,栈 后 进 先 出 9、写 出 下 列 代 码 的 输 出 内 容#include int inc(int a)retum(+a);int multi(int*a,int*b,int*c)retum(*c=*a*b);typedef int(FUNCl)(int in);typedef int(FUNC2)(int*,int*,int*);void show(FUNC2 fun,int argl,int*arg2)(FUNCI p=&inc;int temp=p(argl);fun(&temp,&argl,arg2);printf(%dn,*arg2);)ma
11、in()int a;局 部 变 量 a 为 0;show(multi,10,&a);return 0;)答:11010、请 找 出 下 面 代 码 中 的 所 有 错 误(题 目 不 错,值 得 一 看)说 明:以 下 代 码 是 把 一 个 字 符 串 倒 序,如“abed”倒 序 后 变 为“deba”#includestring.hmain()(char*src=hello,world;char*dest=NULL;int len=strlen(src);dest:=(char*)malloc(len);char*d=dest;char*s=srclen;while(len!=0)d+=
12、s-;printf(%s,dest);return 0;)答:方 法 1:一 共 有 4 个 错 误;int main()char*src=hello,world;int len=strlen(src);char*dest=(char*)malloc(len+l);要 为 分 配 b空 间 char*d=dest;char*s=&srclen-l;/指 向 最 后 一 个 字 符 while(len!=0)*d+=*s-;*d=0;尾 部 要 加 0printf(%sn,dest);free(dest);/使 用 完,应 当 释 放 空 间,以 免 造 成 内 存 汇 泄 露 dest=NUL
13、L;防 止 产 生 野 指 针 return 0;)方 法 2:(方 法 一 需 要 额 外 的 存 储 空 间,效 率 不 高.)不 错 的 想 法#include#include main()(char str=hello,world;int len=strlen(str);char t;for(int i=0;ilen/2;i+)t=str;str=strlen-i-l;小 心 一 点strlen-i-l=t;)printf(%s,str);return 0;)11.对 于 一 个 频 繁 使 用 的 短 小 函 数,在 C 语 言 中 应 用 什 么 实 现,在 C+中 应 用 什 么
14、 实 现?c 用 宏 定 义,C+用 inline12.直 接 链 接 两 个 信 令 点 的 一 组 链 路 称 作 什 么?PPP点 到 点 连 接 13.接 入 网 用 的 是 什 么 接 口?V 5接 口 14.voip都 用 了 那 些 协 议?H.323协 议 簇、SIP协 议、Skype协 议、H.248和 MGCP协 议 15.软 件 测 试 都 有 那 些 种 类?黑 盒:针 对 系 统 功 能 的 测 试 白 盒:测 试 函 数 功 能,各 函 数 接 口 16.确 定 模 块 的 功 能 和 模 块 的 接 口 是 在 软 件 设 计 的 那 个 队 段 完 成 的?概
15、要 设 计 阶 段 17.unsigned char*p 1;unsigned long*p2;p(unsigned char*)0 x801000;p2=(unsigned long*)0 x810000;请 问 p l+5=;p 2+5=;答 案:0 x801005(相 当 于 加 上 5 位)0 x810014(相 当 于 加 上 2 0位);选 择 题:21.Ethtemet链 接 到 Internet用 到 以 下 那 个 协 议?DA.HDLC;B.ARP;C.UDP;D.TCP;E.ID22.属 于 网 络 层 协 议 的 是 B C)A.TCP;B.IP;C.ICMP;D.X.
16、2523.Windows消 息 调 度 机 制 是 C)A.指 令 队 列;B.指 令 堆 栈;C.消 息 队 列;D.消 息 堆 栈;找 错 题:25.请 问 下 面 程 序 有 什 么 错 误?int a602501000,ij,k;for(k=0;kMax_GT_Length)return GT Length ERROR;答:死 循 环 问 答 题:29.IP P hone的 原 理 是 什 么?I P 电 话(又 称 IPPHONE或 VoIP)是 建 立 在 I P技 术 上 的 分 组 化、数 字 化 传 输 技 术,其 基 本 原 理 是:通 过 语 音 压 缩 算 法 对 语
17、音 数 据 进 行 压 缩 编 码 处 理,然 后 把 这 些 语 音 数 据 按 IP等 相 关 协 议 进 行 打 包,经 过 I P 网 络 把 数 据 包 传 输 到 接 收 地,再 把 这 些 语 音 数 据 包 串 起 来,经 过 解 码 解 压 处 理 后,恢 复 成 原 来 的 语 音 信 号,从 而 达 到 由 I P 网 络 传 送 语 音 的 目 的。30.TCP/IP通 信 建 立 的 过 程 怎 样,端 口 有 什 么 作 用?三 次 握 手,确 定 是 哪 个 应 用 程 序 使 用 该 协 议 31.1号 信 令 和 7 号 信 令 有 什 么 区 别,我 国 某
18、 前 广 泛 使 用 的 是 那 一 种?1 号 信 令 接 续 慢,但 是 稳 定,可 靠。7 号 信 令 的 特 点 是:信 令 速 度 快,具 有 提 供 大 量 信 令 的 潜 力,具 有 改 变 和 增 加 信 令 的 灵 活 性,便 于 开 放 新 业 务,在 通 话 时 可 以 随 意 处 理 信 令,成 本 低。目 前 得 到 广 泛 应 用。32.列 举 5 种 以 上 的 电 话 新 业 务 如“闹 钟 服 务”、“免 干 扰 服 务”、“热 线 服 务”、“转 移 呼 叫”、“遇 忙 回 叫”、“缺 席 用 户 服 务”、“追 查 恶 意 呼 叫”、“三 方 通 话”、“
19、会 议 电 话”、“呼 出 限 制”、“来 电 显 示”、“虚 拟 网 电 话”等 四.找 错 题:1.请 问 下 面 程 序 有 什 么 错 误?int a602501000,ij,k;for(k=0;k=1000;k+)for(j=0;j250;j+)for(i=0;i60;i+)a 皿 k=0;答:把 循 环 语 句 内 外 换 一 下 2.#define Max CB 500void LmiQueryCSmd(Struct MSgCB*pmsg)(unsigned char ucCmdNum;for(ucCmdNum=0;ucCmdNumMax_CB;ucCmdNum+)答:死 循 环
20、,unsigned in t的 取 值 范 围 是 0-2553.以 下 是 求 一 个 数 的 平 方 的 程 序,请 找 出 错 误:#define SQUARE(a)(a)*(a)int a=5;int b;b=SQUARE(a+);答:结 果 与 编 译 器 相 关,得 到 的 可 能 不 是 平 方 值.微 软 亚 洲 技 术 中 心 的 面 试 题!1.进 程 和 线 程 的 差 别。答:线 程 是 指 进 程 内 的 一 个 执 行 单 元,也 是 进 程 内 的 可 调 度 实 体.与 进 程 的 区 别:(1)调 度:线 程 作 为 调 度 和 分 配 的 基 本 单 位,进
21、 程 作 为 拥 有 资 源 的 基 本 单 位(2)并 发 性:不 仅 进 程 之 间 可 以 并 发 执 行,同 一 个 进 程 的 多 个 线 程 之 间 也 可 并 发 执 行(3)拥 有 资 源:进 程 是 拥 有 资 源 的 一 个 独 立 单 位,线 程 不 拥 有 系 统 资 源,但 可 以 访 问 隶 属 于 进 程 的 资 源.(4)系 统 开 销:在 创 建 或 撤 消 进 程 时,由 于 系 统 都 要 为 之 分 配 和 回 收 资 源,导 致 系 统 的 开 销 明 显 大 于 创 建 或 撤 消 线 程 时 的 开 销。2.测 试 方 法 答:人 工 测 试:个
22、人 复 查、抽 查 和 会 审 机 器 测 试:黑 盒 测 试 和 白 盒 测 试 3.Heap与 stack的 差 别。答:He叩 是 堆,stack是 栈。Stack的 空 间 由 操 作 系 统 自 动 分 配/释 放,Heap上 的 空 间 手 动 分 配/释 放。Stack空 间 有 限,Heap是 很 大 的 自 由 存 储 区 C 中 的 malloc函 数 分 配 的 内 存 空 间 即 在 堆 上,C+中 对 应 的 是 new操 作 符。程 序 在 编 译 期 对 变 量 和 函 数 分 配 内 存 都 在 栈 上 进 行,且 程 序 运 行 过 程 中 函 数 调 用 时
23、 参 数 的 传 递 也 在 栈 上 进 行 4.Windows下 的 内 存 是 如 何 管 理 的?分 页 管 理 8.谈 谈 IA32下 的 分 页 机 制 小 页(4K)两 级 分 页 模 式,大 页(4M)一 级 9.给 两 个 变 量,如 何 找 出 一 个 带 环 单 链 表 中 是 什 么 地 方 出 现 环 的?一 个 递 增 一,一 个 递 增 二,他 们 指 向 同 一 个 接 点 时 就 是 环 出 现 的 地 方 10.在 IA32中 一 共 有 多 少 种 办 法 从 用 户 态 跳 到 内 核 态?通 过 调 用 门,从 ring3到 ringO,中 断 从 ri
24、ng3到 ring。,进 入 vm86等 等 11.如 果 只 想 让 程 序 有 一 个 实 例 运 行,不 能 运 行 两 个。像 winamp一 样,只 能 开 一 个 窗 口,怎 样 实 现?用 内 存 映 射 或 全 局 原 子(互 斥 变 量)、查 找 窗 口 句 柄.FindW indow,互 斥,写 标 志 到 文 件 或 注 册 表,共 享 内 存。.12.如 何 截 取 键 盘 的 响 应,让 所 有 的 匕 变 成 七?答:键 盘 钩 子 SetWindowsHookEx14.存 储 过 程 是 什 么?有 什 么 用?有 什 么 优 点?答:我 的 理 解 就 是 一
25、堆 sq l的 集 合,可 以 建 立 非 常 复 杂 的 查 询,编 译 运 行,所 以 运 行 一 次 后,以 后 再 运 行 速 度 比 单 独 执 行 SQL快 很 多 15.Template有 什 么 特 点?什 么 时 候 用?答:Template可 以 独 立 于 任 何 特 定 的 类 型 编 写 代 码,是 泛 型 编 程 的 基 础.当 我 们 编 写 的 类 和 函 数 能 够 多 态 的 用 于 跨 越 编 译 时 不 相 关 的 类 型 时,用 Template.模 板 主 要 用 于 STL中 的 容 器,算 法,迭 代 器 等 以 及 模 板 元 编 程.(C+的
26、 template是 实 现 在 库 设 计 和 嵌 入 式 设 计 中 的 关 键。template能 实 现 抽 象 和 效 率 的 结 合;同 时 template还 能 有 效 地 防 止 代 码 膨 胀)16.谈 谈 Windows DNA结 构 的 特 点 和 优 点。答:Windows Distributed interNet Application Architecture(Windows 分 布 式 应 用 结 构,简 称 WindowsDNA)是 微 软 创 建 新 一 代 高 适 应 性 商 业 解 决 方 案 的 框 架,它 使 公 司 能 够 充 分 地 挖 掘 数
27、字 神 经 系 统 的 优 点。WindowsDNA是 第 一 个 将 Internet、客 户/服 务 器、和 用 于 计 算 的 PC模 型 结 合 并 集 成 在 一 起 的 为 新 一 类 分 布 式 计 算 方 案 而 设 计 的 应 用 软 件 体 系 结 构 17.网 络 编 程 中 设 计 并 发 服 务 器,使 用 多 进 程 与 多 线 程,请 问 有 什 么 区 别?答:1)进 程:子 进 程 是 父 进 程 的 复 制 品。子 进 程 获 得 父 进 程 数 据 空 间、堆 和 栈 的 复 制 品。2)线 程:相 对 与 进 程 而 言,线 程 是 一 个 更 加 接
28、近 与 执 行 体 的 概 念,它 可 以 与 同 进 程 的 其 他 线 程 共 享 数 据,但 拥 有 自 己 的 栈 空 间,拥 有 独 立 的 执 行 序 列。两 者 都 可 以 提 高 程 序 的 并 发 度,提 高 程 序 运 行 效 率 和 响 应 时 间。线 程 和 进 程 在 使 用 上 各 有 优 缺 点:线 程 执 行 开 销 小,但 不 利 于 资 源 管 理 和 保 护;而 进 程 正 相 反。同 时、线 程 适 合 于 在 SMP机 器 上 运 行,而 进 程 则 可 以 跨 机 器 迁 移。思 科 1.用 宏 定 义 写 出 swap(x,y)答#define s
29、wap(x,y)x=x+y;y=x-y;x=x-y;2.数 组 a N,存 放 了 1至 N-1个 数,其 中 某 个 数 重 复 一 次。写 一 个 函 数,找 出 被 重 复 的 数 字.时 间 复 杂 度 必 须 为。(N)函 数 原 型:int do_dup(int a,int N)答:int do_dup(int a,int N)未 经 调 试(int sun=0;int sum2;for(int i=0;iN;+i)(Sum+=a;)Sum2=(l+N-l)*N/2;Return(sum-sum2);)3 一 语 句 实 现 x 是 否 为 2 的 若 干 次 幕 的 判 断 答:
30、方 法 l)int i=512;cout boolalpha(i&(i-1)?false:true)endl;/位 与 为 0,则 表 示 是 2 的 若 干 次 哥 2)return(xN=1);4.unsigned int intvert(unsigned int x,int p,intn)实 现 对 x 的 进 行 转 换,p 为 起 始 转 化 位,n 为 需 要 转 换 的 长 度,假 设 起 始 点 在 右 边.如 x=0b0001 0001,p=4,n=3 转 换 后 x=0b0110 0001答:unsigned int intvert(unsigned int x,int p
31、,int n)假 定 p=4,n=3unsigned int _t=0;unsigned int _a=1;for(int i=0;i n;+i)循 环 的 目 的 主 要 是-t_t|=_a;位 或 a=a 1;)_t=_ t p;转 换 后 变 为 1110000 x A=_t;/异 或,将 原 来 的 位 取 反 return x;)慧 通:1.什 么 是 预 编 译,何 时 需 要 预 编 译:答:就 是 指 程 序 执 行 前 的 一 些 预 处 理 工 作,主 要 指#表 示 的.何 时 需 要 预 编 译?1)、总 是 使 用 不 经 常 改 动 的 大 型 代 码 体。2)、程
32、 序 由 多 个 模 块 组 成,所 有 模 块 都 使 用 一 组 标 准 的 包 含 文 件 和 相 同 的 编 译 选 项。在 这 种 情 况 下,可 以 将 所 有 包 含 文 件 预 编 译 为 一 个 预 编 译 头。2.下 述 三 个 有 什 么 区 别?char*const p;char const*pconst char*p解 答:char*const p;常 量 指 针,p 的 值 不 可 以 修 改 char const*p;指 向 常 量 的 指 针,指 向 的 常 量 值 不 可 以 改 const char*p;和 char const*p3.解 释 下 列 输 出
33、 结 果char strl=abc;char str2=abc;const char str3=abc;const char str4=abc;const char*str5=abc;const char*str6=abc;char*str7=abc;char*str8=abc;cout(strl=str2)endl;cout(str3=str4)endl;cout(str5=str6)endl;cout(str7=str8)endl;结 果 是:00 11解 答:strl,str2,str3,str4是 数 组 变 量,它 们 有 各 自 的 内 存 空 间;而 str5,str6,str7
34、,str8是 指 针,它 们 指 向 相 同 的 常 量 区 域。4.以 下 代 码 中 的 两 个 sizeof用 法 有 问 题 吗?C易 void UpperCase(char str)/将 s t r中 的 小 写 字 母 转 换 成 大 写 字 母(fbr(size t i=0;isizeof(str)/sizeof(str0);+i)iR a=str&str=z)str-=(a-A);)char str=aBcDe;cout str 字 符 长 度 为:sizeof(str)/sizeof(str0)endl;UpperCase(str);cout str end!;答:函 数 内
35、 的 sizeof有 问 题。根 据 语 法,sizeof如 用 于 数 组,只 能 测 出 静 态 数 组 的 大 小,无 法 检 测 动 态 分 配 的 或 外 部 数 组 大 小。函 数 外 的 str是 一 个 静 态 定 义 的 数 组,因 此 其 大 小 为 6,函 数 内 的 str实 际 只 是 一 个 指 向 字 符 串 的 指 针,没 有 任 何 额 外 的 与 数 组 相 关 的 信 息,因 此 sizeof作 用 于 上 只 将 其 当 指 针 看,一 个 指 针 为 4 个 字 节,因 此 返 回 4。注 意:数 组 名 作 为 函 数 参 数 时,退 化 为 指 针
36、.数 组 名 作 为 sizeof()参 数 时,数 组 名 不 退 化,因 为 sizeof不 是 函 数.4.一 个 32位 的 机 器,该 机 器 的 指 针 是 多 少 位 指 针 是 多 少 位 只 要 看 地 址 总 线 的 位 数 就 行 了。80386以 后 的 机 子 都 是 3 2的 数 据 总 线。所 以 指 针 的 位 数 就 是 4 个 字 节 了。5.指 出 下 面 代 码 的 输 出,并 解 释 为 什 么。(不 错,对 地 址 掌 握 的 深 入 挖 潜)main()(inta5=l,2,3,4,5);int*ptr=(int*)(&a+l);printf(%d
37、,%d,*(a+l),*(ptr-l);)输 出:2,5*(a+l)就 是 al,*(ptr-l)就 是 a4,执 行 结 果 是 2,5&a+l不 是 首 地 址+1,系 统 会 认 为 加 一 个 a 数 组 的 偏 移,是 偏 移 了 一 个 数 组 的 大 小(本 例 是 5 个 int)int*ptr=(int*)(&a+l);则 p tr实 际 是&(a5),也 就 是 a+5原 因 如 下:&a是 数 组 指 针,其 类 型 为 int(*)5;而 指 针 加 1要 根 据 指 针 类 型 加 上 一 定 的 值,不 同 类 型 的 指 针+1之 后 增 加 的 大 小 不 同
38、a 是 长 度 为 5 的 in t数 组 指 针,所 以 要 加 5*sizeof(int)所 以 p tr实 际 是 a5但 是 prt与(&a+l)类 型 是 不 一 样 的(这 点 很 重 要)所 以 prt-1只 会 减 去 sizeof(int*)a,&a的 地 址 是 一 样 的,但 意 思 不 一 样,a 是 数 组 首 地 址,也 就 是 a0的 地 址,&a是 对 象(数 组)首 地 址,a+1是 数 组 下 一 元 素 的 地 址,即 al,&a+l是 下 一 个 对 象 的 地 址,即 a5.6.请 问 以 下 代 码 有 什 么 问 题:1).int main()(c
39、har a;char*str=&a;strcpy(str,hello);printfifstr);return 0;)答;没 有 为 str分 配 内 存 空 间,将 会 发 生 异 常 问 题 出 在 将 一 个 字 符 串 复 制 进 一 个 字 符 变 量 指 针 所 指 地 址。虽 然 可 以 正 确 输 出 结 果,但 因 为 越 界 进 行 内 在 读 写 而 导 致 程 序 崩 溃。Strcpy的 在 库 函 数 string.h中.程 序 的 主 要 错 误 在 于 越 界 进 行 内 存 读 写 导 致 程 序 崩 溃 2).char*s=AAA;printf(%s,s);s
40、O=B;printf(%s,s);有 什 么 错?答:AAA”是 字 符 串 常 量。s 是 指 针,指 向 这 个 字 符 串 常 量,所 以 声 明 s 的 时 候 就 有 问 题。cosnt char*s=AAA;然 后 又 因 为 是 常 量,所 以 对 是 s0的 赋 值 操 作 是 不 合 法 的。1、写 一 个“标 准”宏,这 个 宏 输 入 两 个 参 数 并 返 回 较 小 的 一 个。答:#define Min(X,Y)(X)(Y)?(Y)X)/结 尾 没 有;2、嵌 入 式 系 统 中 经 常 要 用 到 无 限 循 环,你 怎 么 用 C 编 写 死 循 环。答:whi
41、le(l)或 者 for(;)/前 面 那 个 较 好 3、关 键 字 static的 作 用 是 什 么?答:1)定 义 静 态 局 部 变 量,作 用 域 从 函 数 开 始 到 结 束.2)在 模 块 内 的 static函 数 只 可 被 这 一 模 块 内 的 其 它 函 数 调 用,这 个 函 数 的 使 用 范 围 被 限 制 在 声 明 它 的 模 块 内;3)在 类 中 的 static成 员 变 量 属 于 整 个 类 所 拥 有,对 类 的 所 有 对 象 只 有 一 份 拷 贝 4、关 键 字 const有 什 么 含 意?答:1)表 示 常 量 不 可 以 修 改 的
42、 变 量。2)可 以 修 饰 参 数,作 为 输 入 参 数.3)修 饰 函 数,防 止 以 外 的 改 动.4)修 饰 类 的 成 员 函 数,不 改 变 类 中 的 数 据 成 员.5、关 键 字 volatile有 什 么 含 意?并 举 出 三 个 不 同 的 例 子?答:提 示 编 译 器 对 象 的 值 可 能 在 编 译 器 未 监 测 到 的 情 况 下 改 变。例 子:硬 件 时 钟;多 线 程 中 被 多 个 任 务 共 享 的 变 量 等 6.int(*s10)(int)表 示 的 是 什 么 啊 int(*s10)(int)函 数 指 针 数 组,每 个 指 针 指 向
43、 一 个 int flmc(int param)的 函 数。1.有 以 下 表 达 式:int a=248;b=4;int const c=21;const int*d=&a;int*const e=&b;int const*f const=&a;请 问 下 列 表 达 式 哪 些 会 被 编 译 器 禁 止?为 什 么?答:*c=32;d=&b;*d=43;e=34;e=&a;f=0 x321f;*c这 是 个 什 么 东 东,禁 止*d说 了 是 c o n s t,禁 止 e=&a说 了 是 const禁 止 const*f const=&a;禁 止 2.交 换 两 个 变 量 的 值,
44、不 使 用 第 三 个 变 量。即 a=3,b=5,交 换 之 后 a=5,b=3;答:有 两 种 解 法,一 种 用 算 术 算 法,一 种 用 人(异 或)a=a+b;b=a-b;a=a-b;ora=aAb;只 能 对 int,char.b=aAb;a=aAb;ora 人=b 人=a;3.c和 c+中 的 struct有 什 么 不 同?答:c 和 c+中 struct的 主 要 区 别 是 c 中 的 struct不 可 以 含 有 成 员 函 数,而 C+中 的 struct可 以。c+中 struct和 c la ss的 主 要 区 别 在 于 默 认 的 存 取 权 限 不 同,s
45、truct默 认 为 p u b lic,而 class默 认 为 private.4.#include#include void getmemory(char*p)(p=(char*)malloc(lOO);)int m ain()char*str=NULL;getmemory(str);strcpy(p,hello world);printf(%s/n,str);free(str);return 0;)答:程 序 崩 溃,getmem ory中 的 m a llo c不 能 返 回 动 态 内 存,free()对 s tr操 作 很 危 险 5.char szstr10;strcpy(sz
46、str,0123456789);产 生 什 么 结 果?为 什 么?答;正 常 输 出,长 度 不 一 样,会 造 成 非 法 的 OS,覆 盖 别 的 内 容.6.列 举 儿 种 进 程 的 同 步 机 制,并 比 较 其 优 缺 点。答:原 子 操 作 信 号 量 机 制 自 旋 锁 管 程,会 合,分 布 式 系 统 7.进 程 之 间 通 信 的 途 径 答 共 享 存 储 系 统 消 息 传 递 系 统 管 道:以 文 件 系 统 为 基 础 面 试 经 典 试 题 silver6|02 一 月,2007 11:41面 试 经 典 试 题 Author:Vince-即 使 你 是 个
47、 编 程 高 手,你 在 面 试 前 也 应 该 要 看 看 这 套 题,她 也 许 会 给 你 带 来 好 运,否 则 你 有 可 能 后 悔 当 初 为 什 么 没 有 看 而 跳 楼 自 杀,这 样 我 会 很 内 疚 的。这 套 题 看 似 简 单,但 你 未 必 能 得 高 分,即 使 你 看 不 懂 也 要 把 她 背 下 来!欢 迎 转 载 此 文,转 载 时 请 注 明 文 章 来 源:文 斯 测 试 技 术 研 究 中 心 http:/编 程 基 础 1.1基 本 概 念 1.const的 理 解:const char*,char const*,char*const的 区 别
48、 问 题 儿 乎 是 C+面 试 中 每 次 都 会 有 的 题 目。事 实 上 这 个 概 念 谁 都 有 只 是 三 种 声 明 方 式 非 常 相 似 很 容 易 记 混。Bjarne在 他 的 The C+Programming Language里 面 给 出 过 一 个 助 记 的 方 法:把 一 个 声 明 从 右 向 左 读。char*const cp;(*读 成 pointer to)cp is a const pointer to charconst char*p;p is a pointer to const char;char const*p;同 上 因 为 C+里 面
49、没 有 const*的 运 算 符,所 以 const只 能 属 于 前 面 的 类 型。2.c 指 针 int 指 针 数 组,每 个 元 素 均 为 指 向 整 型 数 据 的 指 针。int(*p)n;-p 为 指 向 一 维 数 组 的 指 针,这 个 一 维 数 组 有 n 个 整 型 数 据。int*p();-函 数 带 回 指 针,指 针 指 向 返 回 的 值。int(*p)();-p 为 指 向 函 数 的 指 针。3.数 组 越 界 问 题(这 个 题 目 还 是 有 点 小 险 的)下 面 这 个 程 序 执 行 后 会 有 什 么 错 误 或 者 效 果:#define
50、 MAX 255int main()(unsigned char AMAX,i;for(i=0;i=MAX;i+)A=i;)解 答:MAX=255,数 组 A 的 下 标 范 围 为 O.MAX-l,这 是 其 一,其 二 当 i 循 环 到 255时 福 环内 执 行:A255=255;这 句 本 身 没 有 问 题,但 是 返 回 for(i=O;i=MAX;i+)语 句 时,由 于 unsignedc h a r的 取 值 范 围 在(O.255),i+以 后 i 又 为 0 了.无 限 循 环 下 去.注:char 类 型 为 一 个 字 节,取 值 范 围 是-128,127,uns