1、面试宝典预处理,const,sizeof

  • Define作用定义函数:

  1. //用一个宏定义FIND求一个结构体struc里某个变量相对于struc的偏移量,如FIND(student,a)//等于0 FIND(student,b)//等于4
  2. #include<stdio.h>
  3. #define FIND(strucrr,e) (unsigned int)&(((strucrr *)0)->e)
  4. struct student
  5. {
  6. double ccc;
  7. int a;
  8. char b;
  9. };
  10.  
  11. int main()
  12. {
  13. struct student A;
  14. printf("ccc的偏移地址为:%d\n",FIND(student,ccc));
  15. printf("a的偏移地址为:%d\n",FIND(student,a));
  16. printf("b的偏移地址为:%d\n",FIND(student,b));
  17. printf("成员1地址:%x\n",&(A.ccc));
  18. printf("成员2地址:%x\n",&(A.a));
  19. printf("成员3地址:%x\n",&(A.b));
  20. printf("结构体变量A所占内存%d\n",sizeof(A)); //结构体变量A所占内存空间始终大于结构的大小,原因是因为内存对齐
  21. return 0;
  22. }
  1.  

若出现以下错误,解决方案是:在项目属性->配置属性->清单工具->输入输出嵌入清单该“是”为“否”,即可解决问题

结果如下所示:

  1. #include<stdio.h>
  2. #define MIN(A,B) (A>B?B:A)
  3. void main()
  4. {
  1. int A=2;
  2. int B=1;
  3. printf("%d",MIN(A,B));
  4. }
  • cosnt

关于书上说的“编译的时候分配内存”http://www.cnblogs.com/helinsen/archive/2012/10/02/2710460.html

const作用http://blog.csdn.net/gulin20475/article/details/6747660

include和extern的关系

两种情况下:左边const相当于define,不分配内存,编译器经过类型检查后直接用100在编译时替换;右边是普通变量,分配内存;加extern就会分配内存

const变量默认是内部部链接,普通变量默认是外部链接

  1. //test.cpp
  2. #include<stdio.h>
  3. const int r=100; //1处:普通变量默认就是extern,但是const是默认内部链接的,如果要外部连接必须加上extern
  4. extern void print();
  5. void main()
  6. {
  7. print();
  8. }
  9.  
  10. test1.cpp
  11. #include<stdio.h>
  12. extern int r;//2处
  13. extern void print()
  14. {
  15. printf("%d",r);
  16. }

会在链接时出现以下错误(编译正确):原因就是普通变量默认就是extern,但是const是默认内部链接的,如果要外部引用必须加上extern

所以1处修改为:extern const int r;同样会出现以上错误,这次的原因就在于2处的extern int r没加const。接着修改2处为extern const int r;成功!

cost 引用

什么情况下不能重载,什么情况下不能重载?

void f(int i) {......} file://一个函数
void f(int i) const {......} file://上一个函数的重载
关于函数overloading, 不能根据返回值类型来确定
double max( int a, int b);
int max( int a, int b);
也不能根据参数的默认值来判断
int max( int a, int b);
int max( int a, int b, int c=12);

const成员函数:

它的声明形如:
int f( ) const;//const放在函数的最后,编译器会对这个函数进行检查,在这个函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法

//假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函数f( )来对这个r进行++r操作,代码如下
void X::f( ) const
{ (const_cast<X*>(this)) -> ++r; } //通过this指针进行类型强制转换实现
另外一种方法就是使用关键字:mutable。如果你的成员变量在定义时是这个样子的:
mutable int r ;
那么它就告诉编译器这个成员变量可以通过const成员函数改变。编译器就不会再理会对他的检查了。

20140319 const sizeof define 编译时分配内存的更多相关文章

  1. C语言中的编译时分配内存

    1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放 ...

  2. mdk编译时的内存分析

    内存四区(代码区,全局区,栈区,堆区) Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区. RO-data:Read Only data,即只读数据域,它指程序中用到的只读数 ...

  3. 记一次因为Gradle与Lombok不兼容导致编译时的内存溢出 Expiring Daemon because JVM heap space is exhausted

    1.现象 版本 Gradel:6.1.1 / 6.5.1 Lombok:1.8.6 / 1.8.10 截图 解决过程 调大idea的堆内存 不行 × idea安装目录中找到 idea64.exe.vm ...

  4. 自制编程语言crowbar(v0.1)构建解析器时分配内存

    crowbar中第一次申请内存是在生成解析器的时候: /* interface.c */CRB_Interpreter *CRB_create_interpreter(void) { MEM_Stor ...

  5. 问题-Delphi2007编译时提示内存错误“sxs.dll. No Debug Info.ACCESS 0xXXXXX"

    相关资料:http://bbs.csdn.net/topics/340132341 问题现象:在调试程序时,未进工程文件中的TApplication.Run;证明不是代码问题. 问题原因:可能是因为* ...

  6. 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等

    今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...

  7. c++ 程序编译后运行时的内存分配

    程序编译后运行时的内存分配 太好的文章了,看到不得不转,转自:http://blog.sina.com.cn/s/blog_5420e0000101a0w1.html 一.编译时与运行时的内存情况 1 ...

  8. QT编译时 cc1plus进程占用大量内存卡死问题解决

    QT5.7 做一个demo编译时,内存几乎完全消耗,卡死.经尝试发现是添加资源文件过大导致(不知是单个文件过大触发还是文件总共过大触发)的.我的资源文件工136M,单个最大是125M左右. 解决方法是 ...

  9. Linux设备驱动程序学习之分配内存

    内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...

随机推荐

  1. 树————N叉树的层序遍历

    思想: 使用队的思想,将每一层的节点放入队列中,依次弹出,同时将其children放入队列. c++ /* // Definition for a Node. class Node { public: ...

  2. 关闭windows的DEP

    1.与开启dep时一样,按组合键win+r打开运行窗口,输入cmd并按回车,如图所示:    2.调出命令提示符窗口后,输入bcdedit.exe/set {current} nx AlwaysOff ...

  3. XML XPATH simpleXML

    XPath 通过DOM结构定位节点,在数据量很大的情况下速度下降的很厉害.解决方法是XPath.Xpath的作用:用于快速定位节点 position()是节点的位置,节点的位置是从1开始 simple ...

  4. Nginx学习——简介及常用命令

    Nginx简介 Nginx是什么 同Apache一样,都是一种WEB服务器 基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP协议提供各种网络服务 ...

  5. assignment of day four

    目录 1.Numeric type (1)integer (2)float Usefulness Define How to use 2.string type Use Define How to u ...

  6. 精选 Dubbo RPC 面试题,比较全面,含答案

    精选 Dubbo RPC 面试题,比较全面,含答案 hu1991die 搜云库技术团队 搜云库技术团队 微信号 souyunku 功能介绍 专注于分享最有价值的互联网技术干货文章,内容覆盖,Java后 ...

  7. 笔记33 Spring MVC的高级技术——Spring MVC配置的替代方案

    一.自定义DispatcherServlet配置  AbstractAnnotationConfigDispatcherServletInitializer所完成 的事情其实比看上去要多.在Spitt ...

  8. ElementUI的使用

    一.安装 1.安装 在项目目录下执行 npm i element-ui -S 2.引入 在 main.js 中写入以下内容: import ElementUI from 'element-ui'; i ...

  9. 从psd图中将图层导出成单独文件

  10. js判断是否为手机端访问

    随着移动端越来越重要,pc和移动端网站后台系统可能是同一个,登录或者某个特定时期需要根据不同访问来源,跳转不同页面或者做不同的处理: 这时我们就需要js的 navigator 对象: 我们先了解一下n ...