`
文章列表
#include <io.h> #include <afx.h> BOOL fnCreateDirectory(CString csFilePath, CString &csErr) { if(csFilePath.IsEmpty()) { csErr.Format("directory argument is empty\r\n"); return FALSE; } if(-1 != _access(csFilePath, 0)) { return TRUE; } int pos = 0; CString c ...
Ctrl+s         存盘      Ctrl+/               注释(取消)代码      Ctrl+shift+/         注释代码块      Ctrl+shift+\         取消代码块      Alt+/                代码辅助/调出IF语句等程序模板:使用方法:打出if,按ALT+/      Ctrl+D              删除一行       Ctrl+Shift+D         在 debug 模式里显示变量值      Ctrl+1               快速修复      ...
参考知识: 操作系统中的堆和栈 栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小 堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大 数据结构中的堆和栈 还有就是 ...

数组和指针的区别

    博客分类:
  • C++
分析一下代码 char *GetString2(void) {  char *p = "hello world";  return p; } void Test5(void) {  char *str = NULL;  str = GetString2();  cout<< str << endl; } 这段代码是可以正常运行的,GetString2返回了只读的内存块,在Test5里面应该是可以访问"hello world"字符串的,在Test5里面对str的任何操作,都是在操作"hello world",所以 ...

堆和栈(四)

    博客分类:
  • C++
7、对象数组 class Obj {  public :   Obj(void);   Obj(int x); } void Test(void) {  Obj *a = new Obj;  Obj *b = new Obj(1);  delete a;  delete b; } 如果用new创建对象数组,那么只能使用对象的无参数构造函数。例如 Obj *objects = new Obj[100]; // 创建100个动态对象 不能写成 Obj *objects = new Obj[100](1);//创建100个动态对象的同时赋初值1 在用delete释放对象数组时,留意不要丢了符号' ...

堆和栈(三)

    博客分类:
  • C++
4、计算内存容量 用运算符sizeof可以计算出数组的容量(字节数)。如下实例(a)中,sizeof(a)的值是12(注意别忘了空字符'\0'),指针p指向a,但是 sizeof(p)的值却是4,这是因为sizeof(p)得 到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量,C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它 注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。如下实例(b)中,不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *) 实例(a)计算数组和指针的内存容量 char a[] ...
含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽 动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理) (5)释放了内存却继续使用它 (11)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面 (12)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁 (13)使用free或delete释放了内存后,没 ...

堆和栈(一)

    博客分类:
  • C++
1、内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高, 但是分配的内存容量有限 (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使 用非常灵活,但问题也最多 2、常见的内存错误及其对策 (1)内存分配未成功 ...
在javascript获取系统时间,并给当前时间月份加3,怎么获取3个月后的时间 var d = new Date(); d.setMonth(d.getMonth()+3); alert(d);

const关键字

    博客分类:
  • C++
在C++中用const来定义常量,可以替换#define,const与指针一起使用: 1、"指向常量的指针"是指一个指向常量的指针变量,它不允许改变指针所指的常量,由于它是一个普通指针变量,不是常指针,因此可以改变其指向,如下代码: cont char *name = "teser"; name[2] = 'A';  //错误,不允许修改指针所指的常量 name = "Mytester"; //正确,可以改变指针的指向 2、"常指针"是指把指针本身,而不是它指向的对象声明为常量,创建一个常指针,就是创建一个不能移 ...

一个简单的算法

    博客分类:
  • C++
1. 设计一个函数:void find1(char array[], char search, char * pi) 要求:这个函数参数中的数组array是以0值为结束的字符串,要求在字符串array中查找字符是参数search里的字符。如果找到,函数通过第三个参数(pa)返回值为array字符串中第一个找到的字符的地址。如果没找到,则为pa为0。 设计:依题意,实现代码如下。 void find2(char [] array, char search, char ** ppa) {    int i;    for (i=0;*(array+i)==0,i++)    {       if ( ...
示例4.3 用函数返回值来传递动态内存   用函数返回值来传递动态内存这种方法虽然好用,但是常常有人把return语句用错了。这里强调不要用return语句返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡,见示例4.4。 char *GetString(void) {  char p[] = "hello world";  return p; // 编译器将提出警告 } void Test4(void) {  char *str = NULL;  str = GetString(); // str 的内容是垃圾  cout<< str <&l ...
  4、指针参数是如何传递内存的?   如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num) {  p = (char *)malloc(sizeof(char) * num); } void Test(void) {  char *str = NULL;  GetMemory(str, 100); // str 仍然为 NULL  strcpy(str, "hello&q ...
function loadScript(src) {   var script = document.createElement("script");   script.type = "text/javascript";   script.src = src;   document.body.appendChild(script); } loadscript(scriptpath);
假定一个指针指向一个int变量,它保存着这个int变量在内存中存储的地址,同样,函数也有地址,这是因为函数的机器语言实现 是由载入到内存的代码组成,指向函数的指针中保存着函数代码起始处的地址 void ToUpper(char *) //函数原型 void (*pf) (char *) //函数指针 void *ph (char *); //返回指针的函数(指针函数) 声明一个指向特定函数类型的指针,首先声明一个该类型的函数,然后用(*pf)形式的表达式代替函数名称,pf就成为可指向那种 类型的函数的指针了;有了函数指针之后,可以把适当类型的函数的地址赋给它,函数名可以用来表示函数的地址,如 ...
Global site tag (gtag.js) - Google Analytics