C++疑问,高手帮忙解决!

来源:百度知道 编辑:UC知道 时间:2024/05/15 02:55:53
下面的这两段代码有什么区别?
(1)int x=10; int *arr=new int[10];
(2)int x=10; int *arr=new int(10);
输出的*arr得知是不一样的,那么new int(10)和new int[10]到底有什么区别?
多谢!

用最通俗易懂的话解释

(1)int *arr=new int[10];

楼主在此处从内存中新开辟了连续的10个int类型的空间,但这些空间中的内容都是未知的,换句话说,天知道arr指向的那个位置的值是多少

(2)int *arr=new int(10);

楼主在此处从内存中新开辟了一个int类型的空间,并且给这个空间初始化了一个值使之等于10,换句话说arr指向的那个位置的值是10

区别在于
int *arr=new int(10)的意思是给指针arr分配一个int的空间,并且将这个空间赋值为10,也就是执行之后有*arr==10
int *arr=new int[10]的意思是给指针arr分配一个长度为10个int的空间,并且这段空间的内容不确定,执行完毕之后就等效于之前声明了int arr[10]

注:C++中声明变量初值可以用括号,比如可以声明int i(10);与int i=10是一个意思,因此int *arr=new int(10)不是强制类型转化,只能是分配空间
况且在分配空间之前,指针所指向的内容是无意义的

int(10)是强制类型转化,得到的结果是一个值为10的int型整数!
int[10]是定义一个长度为10的一维数组,得到的是一个数组首地址!
一个是地址、一个是数字,怎么能一样?
这是不是你们老师故意布置的思考题啊?

[10]表示的是一维数组,(10)是初始化语句,相当于“=” 不过又不完全一样