关于c/c++
文章平均质量分 78
wangtopcool
这个作者很懒,什么都没留下…
展开
-
C结构体中数据的内存对齐问题
1.先看下面的例子:struct A{ char c1; int i; short s; int j;}a;struct B{ int i; int j; short s; char c1;}b;结构A没有遵守字节对齐原则(为了区分,我将它叫做对齐声明原则),结构B遵守了。我们来看看在x86上会出现什么结果。先打印出a和b的各个成员的地址。会看到a中,各个成员间的间距是4个字节转载 2006-11-28 11:08:00 · 1125 阅读 · 0 评论 -
ANSI C中取得结构体字段偏移值的惯用法
假设在ANSI C程序中定义了一个名为MyStruct的结构类型,其中有一个名为MyField的字段,如何取得它在结构体中的偏移?typedef struct MyStruct_tag{ // some fields ... long MyField; // other fields ...} MyStruct; 最容易想到的方法应该与如下代码差不多:s转载 2006-11-28 17:37:00 · 722 阅读 · 0 评论 -
C语言的重要概念
一、C语言的指针1.指针说明 指针是包含另一变量的地址变量。 (1)int *p p是一个指针,指向一个整形数。 (2)int *p() p是一个函数,该函数返回一个指向整数的指针。 (3)int (*p)() p是一个指针,该指针指向一个函数,这个函数返回一个整数。 (4)int *p[] p是一个数组,该数组的每一个元素是指向整数的指针。 (5)int (*p)[] p是转载 2006-11-29 08:41:00 · 728 阅读 · 0 评论 -
堆和栈的区别之我见
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器(Compiler)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(sta转载 2006-11-29 08:42:00 · 795 阅读 · 0 评论 -
try{} catch(…){}
以前都是用try{} catch(…){}来捕获C++中一些意想不到的异常, 今天看了Winhack的帖子才知道,这种方法在VC中其实是靠不住的。例如下面的代码: try { BYTE* pch ; pch = ( BYTE* )00001234 ; //给予一个非法地址 *pch = 6 ; //对非法地址赋值转载 2007-08-24 09:08:00 · 727 阅读 · 0 评论