C++程序设计II学习笔记

Week1&2
String&Cstring

1.用extern关键字再次声明来调用在另一个c文件中声明的全局变量。

2.void *malloc(int size) 在头文件<malloc.h>中声明。

  由于返回类型为void*,所以使用malloc时候,要进行强制类型转换成实际类型的指针。

  size为申请的内存空间大小。

  int *p;

  p = (int*)malloc(sizeof(int));


Date

1.在函数内修改函数在函数外部定义的指针变量,则需要用二级指针作为函数参数。

  char* *p = a;//是指把地址a赋值给p,地址a上的空间存的变量存的是指向char的指针;

  在传递实参时候是传一级指针变量的地址,而不是一级指针变量;

  如 char*a;
     func(char**p);

     func(&a);//不是传a

2.函数原型:int snprintf(char * dst_str, int size,const char* format,...);

  snprintf()将一系列参数“...”按照format的格式格式化成字符串,然后将字符串的前(size-1)部分拷贝到dst_str。

 若拷贝成功则返回字符串*dst_str的长度,否则,返回负值。


EasyString

1.char*->string:char*字符串可以直接赋值给string,并且string可以直接和char*字符串相加;

  string->char*:strcpy(cstr,string.c_str());//c_str()返回指向c字符串的地址;

2.在使用完new的指针后,应该马上delete掉该指针;

  删除new的指针指向的地址空间后,还需要为该指针分配一个NULL地址


macro&inline

1.内联函数inline,可以节约程序调用函数的成本,解决频繁调用小函数而消耗了大量栈内存的问题;

  不适于包含for,while,switch和递归的函数

2.#define func(argument list) () 用#define来定义函数

3.解决c文件多次包含同一个头文件而引起的重定义问题:
  #ifndef _XXX_H_
  #define _XXX_H_
  ...
  //头文件
  ...

  #endif


Week3

SimpleQueue

1.NULL是表示0值的空指针常量,可用来定义空指针;

  空指针不指向任何对象或函数。

  不管指针原本被声明了任何类型,当它被定义成空指针后,该指针就不再指向原来的类型的任何内存空间。

2.内存分配方式共有三种:
  1)在静态存储区域分配,这些内存在程序编译期间分配,在程序运行的整个期间都存在。比如全局变量,static变量
  2)在栈上分配,这些内存在函数执行的时候分配,在函数运行期间存在,当函数执行完毕后会被自动释放。比如局部变量
  3)在堆上分配(动态内存分配),这些内存的生存期由程序员定义,用malloc或new创建,free或new释放。
3.int *p = new int;
  指针变量的内存是在栈或静态存储区域分配的,而new的内存是在堆上分配的。

  所以delete p;是释放指针变量指向的堆上的内存,而非指针变量本身的内存。


猜你喜欢

转载自blog.csdn.net/weixin_37977536/article/details/79670300