c++ new字符串的一点心得

c++ new字符串的一点心得

c++中,new的用法很灵活,这里进行了简单的总结:

1. new() 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;

2. new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量;

 

#include < iostream >
#include
< cstring >
using namespace std;

int main()
{
    
// char* p=new char("Hello");   // error分配一个char(1字节)的空间,
                                  
// 用"Hello"来初始化,这明显不对
     char * p = new char [ 6 ];
    
// p="Hello";                  // 不能将字符串直接赋值给该字符指针p,原因是:
                                 
// 指针p指向的是字符串的第一个字符,只能用下面的
                                 
// strcpy
     strcpy(p, " Hello " );
     cout
<<* p << endl;               // 只是输出p指向的字符串的第一个字符!
     cout << p << endl;                // 输出p指向的字符串!
     delete[] p;
    
return 0 ;
}

输出结果:

H
Hello

3. 当使用new运算符定义一个多维数组变量或数组对象时,它产生一个指向数组第一个元素的指针,返回的类型保持了除最左边维数外的所有维数。

例如:

 

int * p1 = new int [ 10 ];

 

返回的是一个指向int的指针int*

 

int (*p2)[10] = new int[2][10];

new了一个二维数组, 去掉最左边那一维[2], 剩下int[10], 所以返回的是一个指向int[10]这种一维数组的指针int (*)[10].

 

int ( * p3)[ 2 ][ 10 ] = new int [ 5 ][ 2 ][ 10 ];

new了一个三维数组, 去掉最左边那一维[5], 还有int[2][10], 所以返回的是一个指向二维数组int[2][10]这种类型的指针int (*)[2][10].

 

 

#include < iostream >
#include
< typeinfo >
using namespace std;


int main()
{
int * a = new int [ 34 ];
int * b = new int [];
int ( * c)[ 2 ] = new int [ 34 ][ 2 ];
int ( * d)[ 2 ] = new int [][ 2 ];
int ( * e)[ 2 ][ 3 ] = new int [ 34 ][ 2 ][ 3 ];
int ( * f)[ 2 ][ 3 ] = new int [][ 2 ][ 3 ];

a[
0 ] = 1 ;
// b[0] = 1; // 运行时错误,无分配的内存,b只起指针的作用,用来指向相应的数据
c[ 0 ][ 0 ] = 1 ;
// d[0][0] = 1; // 运行时错误,无分配的内存,d只起指针的作用,用来指向相应的数据
e[ 0 ][ 0 ][ 0 ] = 1 ;
// f[0][0][0] = 1; // 运行时错误,无分配的内存,f只起指针的作用,用来指向相应的数据

cout
<< typeid(a).name() << endl;
cout
<< typeid(b).name() << endl;
cout
<< typeid(c).name() << endl;
cout
<< typeid(d).name() << endl;
cout
<< typeid(e).name() << endl;
cout
<< typeid(f).name() << endl;

delete[] a;
delete[] b;
delete[] c;
delete[] d;
delete[] e;
delete[] f;
}

 

输出结果:

int *
int *
int (*)[2]
int (*)[2]
int (*)[2][3]
int (*)[2][3]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值