1.动态获得内存的代码:
void GetMemory(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
char* GetMemory2(int num)
{
char* p = (char *)malloc(sizeof(char) * num);
return p;
}
------------------------------------------
错误的代码:
void GetMemory3(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}///错误在哪里,我就不说,自己去查.
2.strcpy()的代码:
char* strcpy(char* strDest,const char* strSrc)
{
if(strDest==NULL || strSrc==NULL) return NULL;
char* pStr=strDest;
while((*strDest++=*strSrc++)!='/0)
NULL;
return pStr;
}
3.memcpy()的代码:
void* memcpy(char* strDest,const char* strSrc,size_t size)
{
if(strDest==NULL||strSrc==NULL) return NULL;
if(size <=0) return NULL;
char* pStr=strDest;
while(size-->0)
*strDest++=*strSrc++;
return pStr;
}
4.关于sizeof操作符:
char 1
short 2
short int 2
signed short 2
unsigned short 2
int 4
long int 4
signed int 4
unsigned int(unsigned) 4
long 4
unsigned long 4
float 4
double 8
void* 4 (所有指针类型长度都一样)(char*,int*,float*,double*)
enum 4
是在32bit系统中..
5.函数的参数传递
值传递,指针传递,引用传递.
值传递:由于Func1 函数体内的x 是外部变量n 的一份拷贝, 改变x 的值不会影响n, 所以n 的值仍然是0. 示例:
void Func1(int x)
{
x = x + 10;
}
…
int n = 0;
Func1(n);
cout < < "n = " < < n < < endl; // n = 0
指针传递:由于Func2 函数体内的x 是指向外部变量n 的指针,改变该指针的内容将导致n 的值改变,所以n 的值成为10.示例:
void Func2(int *x)
{
(* x) = (* x) + 10;
}
…
int n = 0;
Func2(&n);
cout < < "n = " < < n < < endl; // n = 10
引用传递:由于Func3 函数体内的x 是外部变量n 的引用,x和n是同一个东西,改变x 等于改变n,所以n 的值成为10.示例:
void Func3(int &x)
{
x = x + 10;
}
…
int n = 0;
Func3(n);
cout < < "n = " < < n < < endl; // n = 10
6.内存分配方式:
静态存储区域分配:全局变量,static变量;内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在;
栈分配:函数内局部变量;栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.
堆分配:new和malloc动态分配;用malloc和new申请任意多的内存,程序员负责何时用free和delete释放内存