C/C++变量分析
BSS
未初始化的数据
DATA
初始化的数据
TEXT(code)
代码
在C中有全局、局部(自动变量)和静态变量。
全局变量在C语言里表示时,在函数之外的就是全局变量,即在函数外所申明的变量;而静态变量可以放在函数外,也可以放在函数内。全局变量有两个作用:第一,当在函数外申明时,所有文件的函数都可以访问它,都可以直接引用全局变量的访问;第二,可以允许另外的文件访问,但是在那个要访问的文件中用extern做标记。而静态变量如果放在函数的外面,则在整个文件中也是可以访问的,但是,另外的文件是不可以访问的。如果静态变量放在函数内,那么就只能是这个函数能访问,但它还是放在DATA区域中的。
局部变量都是在堆栈中的,而静态和全局都是在数据区中。堆栈和全局区在执行的时候如图所示;
堆区
栈区
堆区
BSS
DATA
CODE
如果类是一个巨大的类,需要占据很大的数据空间,就应该把它当做指针用new来分配空间。
局部变量(自动变量),自动的意思就是自动地分配和清除,并且出示的值也是随机的。所以,如果程序中没有对自动变量进行复制就使用,那么可能会出现意想不到的问题。
相关文档:
googletest C/C++ 测试框架非常好用,介绍及下载请看 http://code.google.com/p/googletest/
//============================================================================
// 使用 googletest 测试框架
//============================================================================
// Returns n! ......
/*
注意不断右移判断最低位是1有多少个的算法是错误的,
因为根据GNU C/C++的实现来看,负数是带符号填充进行右移的,所以如果是负数,该算法会死循环。
变通办法:Java可以用>>>逻辑右移位操作符,C/C++可以强制转换成无符号整数再处理
下面的程序是正解。其中num &= (num - 1) 会消除num的最小位置的"1" ......
/*
这是个常见的面试题哦,总之我面试的时候遇到过, 当时没有答上来
回去后想出来下面的方法一,该法还有个附加优点,可以判断出链表在哪个地方形成环的(即如果想拆开这个环,从哪个地方断开)。
后来知道还有个经典算法,即使用两个指针,一快一慢向前试探,如果最终重合则链表有环,果然优美的算法。
*/
#inc ......
#include "Stdio.h"
#include "Conio.h"
#include
#define size 81
#define lim 5
#define tstr "ABCDEFGH"
void display(char **p,int i);
void display2(char *p[],int i);
void display3(char (*p)[40],int i);
void testint();
int main(void)
{
testint();
getch();
return 0;
}
test1() ......
网上流传很多C和C# 神话
我听了以后,决定打破这些美丽的神话。。给大家开开眼界,更希望能说明一个神话,。,,
解开我 最神秘的等待
C
程序怎样反编译成
C
语言的程序?
神话:无法反编译的,,只能通过汇编来解释。
详细:
C语言源程序经过编译、优化,得到目标格式,但由目标格式不能 ......