预处理、const与sizeof相关面试题
1.用预处理指令#define 声明一个常数,用以表明一年中有多少秒(忽略闰年问题)
#define语法知识:
(1) 不能以分号结束,括号的使用防止宏定义展开后的二义性。
(2) 预处理器将为你计算常数表达式的值,因此给出计算表达式而不是具体的值更好。
(3) 意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,(UL表示无符号长整型)
答案:#define SECONDS_PER_YEAR(60*60*24*365)UL
2.写一个标准宏MIN 返回较小的数
注意:在宏定义中要小心地把参数用括号括起来
答案:#define MIN ((a)<=(b)?(a):(b))
3.What dose the keyword "const"means in C program? Please at least make two examples about the usage of const.
答案:(1) 可以定义const常量
(2)const可以修饰函数的参数和返回值,甚至函数的定义体。被const修饰的东西受到强制保护,可以预防意外的变动,提高程序的健壮性。
4.const和#define 相比有什么不同?
答案:(1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料之外的错误。
(2) 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在C++程序中只使用const常量而不使用宏常量。
5.sizeof()
(1) 静态变量存放在全局数据区,而sizeof计算栈中分配的大小,不把静态变量计算在内。
6.sizeof 和 strlen的区别
答案:(1) sizeof操作符的结果类型是size_t,它在头文件的typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
(2) sizeof是运算符,strlen是函数
(3) sizeof 可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。sizeof还可以用函数做参数
(4) 数组做sizeof的参数不退化,传递给strlen就退化为指针了。
(5) 大部分编译程序在编译的时候把sizeof计算过了,是类型或是变量的长度
(6) strlen 的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型占内存大小。
(7) sizeof 后如果是类型必循加括号,如果是变量名可以不加括号,因为sizeof是个操作符而不是个函数,
(8) 当使用了一个结构体或变量时,sizeof返回实际的大小。当使用一静态的空间数组时,sizeof返回全部数组的尺寸。sizeof操作符不能返回被动态分配的数组或外部数组的尺寸。
(9)sizeof计算结构变量的大小就必须考虑数据对齐问题。
(10) sizeof不能用于函数类型,不完全类型或者位字段。不完全类型指的是具有未知存储大小数据的数据类型,如未知存储大小的数组类型,未知内容的结构体或联合类型,void类型。
预处理、const与sizeof相关面试题的更多相关文章
- 程序员面试宝典 笔记(第六章 预处理 const 和sizeof())
void main() { "; cout<< cout<< "; cout<< cout<<strlen(ss2)<< ...
- C++面试笔记--const、sizeof
首先来一个关于const的全面的解释,先看一波代码,之后再进行详细的分情况解释 ; const int *a=&b;//指向一个int常量的指针 int const *a=&b;//和 ...
- C# 相关面试试题简单的总结
最近一个搞NET开发的朋友离职了,想让我给他找点关于NET的相关面试题,准备抱一下佛脚,迎接新的挑战. 我赶紧找到以前检索的各种宝典,试题,今天梳理一下关于NET的基础知识点. 1.面向对象语言的三大 ...
- Linux相关面试题&答案
Linux相关面试题&答案 Linux面试题&答案 假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] " ...
- HashMap源码与相关面试题
一.哈希表 哈希表是一种可以快速定位得数据结构.哈希表可以做到平均查找.插入.删除时间是O(1),当然这是指不发生Hash碰撞得情况.而哈希表最大得缺陷就是哈希值得碰撞(collision). Has ...
- const修饰符相关
const修饰符相关 const修饰符表明一个变量是常量,大致分为三类:常量数组(等同于常量指针),常量指针,指向常量的指针. 常量数组中数据都是不可修改的,任何试图修改常量数组中的数据的操作都会报错 ...
- spring MyBatis的相关面试题
(相关面试题! 供参考!) 1.ORM框架有哪些? MyBatis:半自动化框架(不是纯ORM) 需要写动态SQL语句,实体类和SQL语句之间建立映射关系 Spring:轻量级框架, Java EE的 ...
- 面试宝典之预处理、const与sizeof
#include <stdio.h> #define SUB(x, y) x - y #define ACCESS_BEFORE(element, offset, value) *SUB( ...
- 面试题总结(三)、《STL源码剖析》相关面试题总结
声明:本文主要探讨与STL实现相关的面试题,主要参考侯捷的<STL源码剖析>,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助 ...
随机推荐
- XML数据的读取—数据库配置文件
数据库配置文件(config.xml) <?xml version="1.0" encoding="utf-8"?> <configurati ...
- [Linux]三种方案在Windows系统下安装ubuntu双系统(转)
在学习linux的过程中,ubuntu无疑是初学者的最佳选择. 下面来列举给Windows系统安装ubuntu双系统的三种方法. 一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已 ...
- 跨域信息传递postMessage
var sendToParent = function(event, data, listener) { var message = { event: event, data: data, liste ...
- html行内元素 和 块状元素 总结
块状元素 address - 地址blockquote - 块引用center - 举中对齐块dir - 目录列表div - 常用块级容易,也是CSS layout的主要标签dl - 定义列表fiel ...
- php按址传递bug
foreach ($product_info as $key=>&$value){ $value['bookCity'][]=array( ...
- 如何缩减Try{}Catch{}Finally{}代码----定义一个公用的Try{}Catch{}Finally{}
public class Process { public Process() { } public static void Execute(Action action) { try { //ACTI ...
- PHP常用代码大全
1.连接MYSQL数据库代码 <?php $connec=mysql_connect("localhost","root","root" ...
- github修改自己的昵称
由于刚接触github,不会用,就随便写了个昵称,后来想改,却不知道从哪里改,到百度搜结果都是说不能修改的(这里就不吐槽百度了),还是直接上图吧. 点击Settings,然后跳转到下面界面,点击Acc ...
- office - 连接字符串.
Microsoft ACE OLEDB 12.0 Connect to Excel 2007 (and later) files with the Xlsx file extension. That ...
- 【转】解析JDK 7的动态类型语言支持
http://www.infoq.com/cn/articles/jdk-dynamically-typed-language Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问 ...