c/c++的知识点收集

来源:互联网 发布:部落冲突宝石升级数据 编辑:程序博客网 时间:2024/05/04 05:09

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释放内存

 

原创粉丝点击