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();
char *Pc = new char('c');
int *p = new int[];
printf("Begin...\n");
printf("*pi = %d\n",*pi);
printf("*pc = %c\n",*Pc);
for(int i = ;i< ; i++)
{
p[i] = i;
printf("p[%d] = %d\n",i,p[i]);
}
printf("End...\n");
delete pi;
delete Pc;
delete[] p;
return ;
}

  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();
char *Pc = new char('c');
int *p = new int[];
printf("Begin...\n");
printf("*pi = %d\n",*pi);
printf("*pc = %c\n",*Pc);
for(int i = ;i< ; i++)
{
p[i] = i;
printf("p[%d] = %d\n",i,p[i]);
}
printf("End...\n");
delete pi;
delete Pc;
delete[] p;
return ;
} #include <stdio.h> namespace Frist
{
int i = ;
} namespace seconde
{
int i=;
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 ={,};//初始化 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 ;
}

运行结果:  

Begin...
Frist::i =
seconde::i =
p.x =
p.y =
End...

C++ new、delete、namespace关键字。的更多相关文章

  1. namespace关键字学习笔记

    一.namespace简介 namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越 ...

  2. php-Eclipse对php中的namespace关键字报语法错误的问题

    namespace是php5.3以上才支持的, 解决办法:升级IDE 切换Eclipse中的php版本 Window  > Preferences  > PHP  > PHP Int ...

  3. PHP 命名空间(namespace)

    PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物. 不过在PHP当中还是有着相当重要的意义 ...

  4. PHP命名空间(Namespace)的使用详解(转)

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

  5. 关于JavaScript的namespace命名空间

    写C或者JAVA习惯的人写JavaScript时可能会发现JavaScript并没有命名空间这一概念,当然如果没有接触过命名空间的程序猿(比如写js,PHP,Python)也可能对命名空间不关注或者不 ...

  6. C#命名空间详解namespace

     命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间, 命名空间的好处是:1.避免名字冲突,2.便于查找类型名字. 如:System.secruity.Cry ...

  7. PHP命名空间(Namespace)的使用详解

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

  8. new和delete操作符

    C 语言中提供了 malloc 和 free 两个系统函数, 完成对堆内存的申请和释放.而 C++则提供了两个操作符 new 和 delete. 1. newnew 分配内存空间时,  分配内存空间大 ...

  9. PHP深入浅出之命名空间(Namespace)的使用详解

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

随机推荐

  1. Remove the Substring

    D2. Remove the Substring (hard version) 思路:其实就是贪心吧,先从前往后找,找到 t 可在 s 中存在的最小位置 (pre),再从后往前找,找到 t 可在 s ...

  2. TCP连接数配置

    一般的设置规则为: 系统最大文件数>可用端口>用户最大文件数 sysctl -a | grep file-max cat /proc/sys/fs/file-max 这表明这台Linux系 ...

  3. SQLite索引

    索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索.简单地说,索引是一个指向表中数据的指针.一个数据库中的索引与一本书后边的索引是非常相似的. 例如,如果您想在一本讨论某个话题的书中 ...

  4. 【转】如何在Oracle中复制表结构和表数据

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  5. Linux Bash shell常用操作快捷键

    转自:https://linuxtoy.org/archives/bash-shortcuts.html 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 ...

  6. AOP 代理类的创建

    AOP 代理类的创建 入口:AnnotationAwareAspectJAutoProxyCreator#postProcessAfterInitialization 和 AnnotationAwar ...

  7. Error-ASP.NET:编译器错误消息: CS0016: 未能写入输出文件

    ylbtech-Error-ASP.NET:编译器错误消息: CS0016: 未能写入输出文件 1.返回顶部 1. “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过 ...

  8. 利用开源SlidingMenu框架实现左右侧滑菜单的功能

    package com.loaderman.slidingmenudemo; import android.os.Bundle; import android.support.v4.app.Fragm ...

  9. Python Module_sys/random

    目录 目录 前言 软件环境 Python标准库初识 Python常用的标准库模块 dir 函数使用方法 sys操作系统功能模块 sysstdinsysstdoutsysstderr标准IOError流 ...

  10. 阶段3 2.Spring_06.Spring的新注解_6 Qualifier注解的另一种用法

    复制上面的数据源到下面改改名字 现在就是有两个数据源 创建一个eesy02的数据库 找到sql语句再创建Account表 现在就相当于有连个库一个eesy一个是eesy02这连个库. account里 ...