Week1&2
String&Cstring1.用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的长度,否则,返回负值。
EasyString1.char*->string:char*字符串可以直接赋值给string,并且string可以直接和char*字符串相加;
string->char*:strcpy(cstr,string.c_str());//c_str()返回指向c字符串的地址;
2.在使用完new的指针后,应该马上delete掉该指针;
删除new的指针指向的地址空间后,还需要为该指针分配一个NULL地址
macro&inline1.内联函数inline,可以节约程序调用函数的成本,解决频繁调用小函数而消耗了大量栈内存的问题;
不适于包含for,while,switch和递归的函数
2.#define func(argument list) () 用#define来定义函数
3.解决c文件多次包含同一个头文件而引起的重定义问题:
#ifndef _XXX_H_
#define _XXX_H_
...
//头文件
...#endif
Week3SimpleQueue
1.NULL是表示0值的空指针常量,可用来定义空指针;
空指针不指向任何对象或函数。
不管指针原本被声明了任何类型,当它被定义成空指针后,该指针就不再指向原来的类型的任何内存空间。
2.内存分配方式共有三种:
1)在静态存储区域分配,这些内存在程序编译期间分配,在程序运行的整个期间都存在。比如全局变量,static变量
2)在栈上分配,这些内存在函数执行的时候分配,在函数运行期间存在,当函数执行完毕后会被自动释放。比如局部变量
3)在堆上分配(动态内存分配),这些内存的生存期由程序员定义,用malloc或new创建,free或new释放。
3.int *p = new int;
指针变量的内存是在栈或静态存储区域分配的,而new的内存是在堆上分配的。
所以delete p;是释放指针变量指向的堆上的内存,而非指针变量本身的内存。