知识盲点
文章平均质量分 84
chasexie(xiehonghao)
chasexie
展开
-
C语言知识盲点
各种变量在内存中的高地址低地址问题 测试环境:c++ ,vs2005, release 先确认一下这里“低地址高地址”的定义,这里并不是指的大端小端中的地址高低,而是内存中的地址,如下: 00421ae0为相对低地址,00421ae8为相对高地址. 1.全局变量 #include "stdafx.h" int gNumber1 = 1234; int gNumber2 =原创 2013-12-15 16:38:56 · 902 阅读 · 0 评论 -
指针常量与常量指针
参考 http://blog.sina.com.cn/s/blog_4826f7970100074l.html 指针常量与指向常量的指针 0、指针变量! 指针变量有三个属性,一个是它的地址,一个是它的值(也就是它指向的地址),还有一个是它指向地址里面的值(也就是它指向的内容)。 如: int a,*p=&a,**pp=&p; 对于指针p,它的值就是变量a的地址,而它的地址,原创 2013-12-28 14:07:09 · 803 阅读 · 0 评论 -
malloc函数和free函数
c语言中的动态内存分配函数malloc和free使用起来很灵活,但是也很容易导致错误, 如果知道了malloc和free的实现原理,那么,出错的机会就很小了。 malloc的实现原理: 操作系统维护了一个将可用的内存块连接为一个长长的列表的所谓空闲链表。 调用malloc函数时,操作系统沿链表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的转载 2013-12-28 19:22:22 · 818 阅读 · 0 评论 -
位域及其内存对齐
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个类型单元中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以达到压缩数据的目的。 位域定义 位转载 2013-12-28 21:20:41 · 1377 阅读 · 0 评论 -
c语言结构体对齐 共用体对齐 位域对齐 面试常考题目
C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。结构体到底怎样对齐?下面总结了对齐原则,在没有#pragma pack宏的情况下: 原则1、普通数据成员对齐规则:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。 原则2、结构体成员对齐规则:如果一个结构里有某些结构体成转载 2013-12-16 22:17:40 · 2031 阅读 · 0 评论 -
static关键字
C/C++中的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类的问题。 A. 面向过程程序设计中的static关键字 1) 静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。静态全局变量定义和使用类似: #inclu转载 2013-12-30 21:33:12 · 742 阅读 · 0 评论 -
指向数组的指针 一定要好好看看这个文章
http://blog.chinaunix.net/uid-26694208-id-3842773.html 一. 二维数组元素的地址 为了说明问题, 我们定义以下二维数组: int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}; a为二维数组名, 此数组有3行4列, 共12个元素。但也可这样来理解, 数组a由三转载 2013-12-21 20:25:55 · 763 阅读 · 0 评论 -
volatile修饰符
volatile它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.不进行优化如 a = 3; a = 4; a = 5;编译器优化后会只执行a[1] = 5 这一句话 若对a进原创 2014-04-07 21:58:34 · 725 阅读 · 0 评论 -
函数的调用约定 __stdcall __cdecl __fastcall
__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右原创 2014-04-07 20:31:18 · 907 阅读 · 0 评论