zoukankan      html  css  js  c++  java
  • 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...
    ");
        printf("*pi = %d
    ",*pi);
        printf("*pc = %c
    ",*Pc);
        for(int i = 0;i<10 ; i++)
        {
            p[i] = i;
            printf("p[%d] = %d
    ",i,p[i]);    
        }
           printf("End...
    ");
        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...
    ");
        printf("*pi = %d
    ",*pi);
        printf("*pc = %c
    ",*Pc);
        for(int i = 0;i<10 ; i++)
        {
            p[i] = i;
            printf("p[%d] = %d
    ",i,p[i]);    
        }
           printf("End...
    ");
        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...
    ");
        printf("Frist::i = %d
    ",i);//直接使用 Frist 中的变量i
        printf("seconde::i = %d
    ",seconde::i);//使用seconde命名空间中的变量i  注意如果同时使用Frist 与seconde整个命名空间就不能直接使用变量i
        p thirdly_p ={1,2};//初始化 seconde 命名空间中的 thirdly命名空间中的 结构体p
        printf("p.x = %d
    ",thirdly_p.x);//直接使用 thirdly_p.x
        printf("p.y = %d
    ",thirdly_p.y);
           printf("End...
    ");
        
        return 0;
    }

    运行结果:  

    Begin...
    Frist::i = 1
    seconde::i = 10
    p.x = 1
    p.y = 2
    End...
  • 相关阅读:
    ajax与302响应
    读过/在读/想读的英文原著
    从编译DotNetOpenAuth中学到的程序集强签名知识
    百度输入法引起的Mac远程桌面Ctrl+.快捷键不起作用
    MacBook鼠标指针乱窜/不受控制问题的解决方法
    IIS中User-mode caching引起的Cache-Control不为public的问题
    让IIS8支持WCF的最简单方法
    在ASP.NET Web Forms中用System.Web.Optimization取代SquishIt
    苹果官方发布,iPhone 6 & Plus 设计素材
    jQuery 特效:盒子破碎和移动动画效果
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/11629593.html
Copyright © 2011-2022 走看看