数组与指针的区别

原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5149144.html

1.数组的分配与释放

数组在内存中是连续存放的,开辟一块连续的内存空间;数组所占存储空间:sizeof(数组名),数组大小:sizeof(数组名)/sizeof(数据类型)。初始化字符数组时要注意字符串结尾处有结尾符‘\0’。 

char a[]={"Hello"};//按字符串初始化,大小为6.
char b[]={'H','e','l','l','o'};//按字符初始化(错误,输出时将会乱码,没有结束符)

char c[]={'H','e','l','l','o','\0'};//按字符初始化

2.指针的分配与释放:

指针是一种类型,包含其他变量的地址,也有的叫它“地址变量”。指针的类型是说明指针所指向的地址空间的类型。

申请、释放堆中的指针,使用new 和 delete,动态分配失败,返回一个空指针(NULL)

指向对象的指针:int *p=new int(0) ;    delete p;(()里面的值是初始化值)

指向数组的指针:int *p=new int[n];    delete[] p;(n表示数组的大小,值不必再编译时确定,可以在运行时确定)

指向类的指针:Class *p=new Class;  delete p;(若构造函数有参数,则new Class后面有参数,否则调用默认构造函数,delete调用析构函数)

指针数组:一个数组里面存放的同类型的指针,如 int *a[10];需要对数组每个元素初始化如:a[0]=new int [n];a[1]=new int [m];释放也要单独释放:delete a[0];delete a[1]

数组指针:指向数组的指针。1维:int *p=new int[10];delete []p; 2维:int (*p)[10]=new int[10][10];delete[] p; 3维:int(*p)[9][9]=new int [1][9][9];delete []p;

指针的指针:int **pp=new (int*)[2]; pp[0]=new int[3];pp[1]=new int[4];delete[] pp[0];delete[]pp[1]

程序验证:

参考:http://www.cnblogs.com/ForEverKissing/archive/2008/07/21/1247633.html

          http://www.cnblogs.com/csyisong/archive/2010/03/18/1688877.html

 

posted @ 2016-01-21 17:55  shrimp_929  阅读(4189)  评论(0编辑  收藏  举报