• 第10课 C++中的动态内存分配


    C++中的动态内存分配

    C语言是通过库函数来完成动态内存分配的,而C++是通过关键字从语言层面支持的。

    C语言中的malloc是基于字节来进行内存申请的,C++中是基于类型来进行的。

    delete加上[]代表释放数组,如果不加的话只会释放第一个元素的内存空间。

     示例程序如下:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int* p = new int;
     6     
     7     *p = 5;
     8     *p = *p + 10;
     9     
    10     printf("p = %p
    ", p);
    11     printf("*p = %d
    ", *p);
    12     
    13     delete p;
    14     
    15     p = new int[10];
    16     
    17     for(int i=0; i<10; i++)
    18     {
    19         p[i] = i + 1;
    20         
    21         printf("p[%d] = %d
    ", i, p[i]);
    22     }
    23     
    24     delete[] p;
    25     
    26     return 0;
    27 }

    运行结果如下:

    new和delete在使用体验上比malloc和free好,malloc和new的区别如下:

    new关键字的初始化:

    示例程序如下:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int* pi = new int(1);
     6     // int* pa = new int[1];
     7     
     8     float* pf = new float(2.0f);
     9     char* pc = new char('c');
    10 
    11     printf("*pi = %d
    ", *pi);
    12     printf("*pf = %f
    ", *pf);
    13     printf("*pc = %c
    ", *pc);
    14     
    15     delete pi;
    16     delete pf;
    17     delete pc;
    18     
    19     return 0;
    20 }

    运行结果如下:

    new int(1)和new int[1]是不同的,一个是申请内存并初始化,一个是申请有一个元素的数组。

     C++中的命名空间:

    C++中命名空间的定义:

    C++命名空间的使用:

    示例程序:

     1 #include <stdio.h>
     2 
     3 namespace First
     4 {
     5     int i = 0;
     6 }
     7 
     8 namespace Second
     9 {
    10     int i = 1;
    11     
    12     namespace Internal
    13     {
    14         struct P
    15         {
    16             int x;
    17             int y;
    18         };
    19     }
    20 }
    21 
    22 int main()
    23 {
    24     using namespace First;
    25     using Second::Internal::P;
    26     
    27     printf("First::i = %d
    ", i);
    28     printf("Second::i = %d
    ", Second::i);
    29     
    30     P p = {2, 3};
    31     
    32     printf("p.x = %d
    ", p.x);
    33     printf("p.y = %d
    ", p.y);
    34     
    35     return 0;
    36 }

    运行结果如下:

    小结:

      C++中内置了动态内存分配的专用关键字

      C++中的动态内存分配可以同时进行初始化

      C++中的动态内存分配是基于类型进行的

      C++中命名空间概念用于解决名称冲突问题

  • 相关阅读:
    发一弹
    压缩图片
    页面返回并刷新页面
    贤心的WEB弹窗挺不错的
    SMS短信发送API 以后可以弄个短信验证了
    <many-to-one>的fetch属性
    AJAX技术
    中国土地所有权的属性
    Today 's check:mappingResource属性和mappingDirectoryLocations属性的使用
    Pattern类的中文版 菜鸟翻译 有错请纠
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9521579.html
Copyright © 2020-2023  润新知