C++ new、delete、namespace关键字。

C++ 中的动态内存分配:

  C++与C语言分配内存关键字不同,C语言中的动态内存分配是通过 malloc(分配内存) 与 free(释放内存)完成。C++使用new(分配内存)  delete(释放内存)。

  C++与C语言分配内存方式不同,C语言是以字节进行内存分配,C++是以类型进行内存分配。

  C++申请内存方法:    

变量申请内存:
type *name = new type;
delete name;

数组申请内存:
type *name = new type[N];
delete[] name;

带初始化的内存分配:
type *name = new type(val);//val 初始值

  C语言申请内存方法: 

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

  实验代码:  

#include <stdio.h>


int main(int argc, char *argv[])
{
    int *pi  = new int(100);
    char *Pc = new char('c');
    int *p = new int[10];
    printf("Begin...\n");
    printf("*pi = %d\n",*pi);
    printf("*pc = %c\n",*Pc);
    for(int i = 0;i<10 ; i++)
    {
        p[i] = i;
        printf("p[%d] = %d\n",i,p[i]);    
    }
       printf("End...\n");
    delete pi;
    delete Pc;
    delete[] p;
    return 0;
}

  new关键字与malloc函数的区别:

  new 是C++的一部分,malloc是由C库提供的

  new是以具体类型为单位进行内存分配,malloc是以字节为单位进行内存分配。

  new在申请单个类型变量的时候可以进行初始化,malloc不具备这种特性。

 

  C++ 的命名空间 namespace:

  在C语言中只有一个全局作用域,这样可能发生标识符之间的冲突。

  C++可以将全局作用域分成不同的部分,不同命名空间的标识符可以同名不会发生冲突。命名空间可以嵌套。全局作用域也叫作默认的命名空间。  

C++ 命名空间定义:
    namespace 
    {
      namespace
      {
        /**/        
        } 
        /**/       
    }

  

 测试代码:

  

#include <stdio.h>


int main(int argc, char *argv[])
{
    int *pi  = new int(100);
    char *Pc = new char('c');
    int *p = new int[10];
    printf("Begin...\n");
    printf("*pi = %d\n",*pi);
    printf("*pc = %c\n",*Pc);
    for(int i = 0;i<10 ; i++)
    {
        p[i] = i;
        printf("p[%d] = %d\n",i,p[i]);    
    }
       printf("End...\n");
    delete pi;
    delete Pc;
    delete[] p;
    return 0;
}




#include <stdio.h>

namespace Frist
{
    int i = 1;
}

namespace seconde
{
    int i=10;
    namespace thirdly
    {
        struct p
        {
            int x;
            int y;
        };
    }
}

int main(int argc, char *argv[])
{
    using namespace Frist;     //使用 Frist整个命名空间
    using  seconde::thirdly::p;//使用seconde 命名空间中的 thirdly命名空间中的 结构体p
    printf("Begin...\n");
    printf("Frist::i = %d\n",i);//直接使用 Frist 中的变量i
    printf("seconde::i = %d\n",seconde::i);//使用seconde命名空间中的变量i  注意如果同时使用Frist 与seconde整个命名空间就不能直接使用变量i
    p thirdly_p ={1,2};//初始化 seconde 命名空间中的 thirdly命名空间中的 结构体p
    printf("p.x = %d\n",thirdly_p.x);//直接使用 thirdly_p.x
    printf("p.y = %d\n",thirdly_p.y);
       printf("End...\n");
    
    return 0;
}

运行结果:  

Begin...
Frist::i = 1
seconde::i = 10
p.x = 1
p.y = 2
End...

 

posted @ 2019-10-07 10:15  Dipsyhu  阅读(515)  评论(0编辑  收藏  举报