c++数组new的初始化问题。

 我来答
折柳成萌
高粉答主

2019-10-30 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:4.4万
采纳率:96%
帮助的人:6072万
展开全部
这个语法是符合标准的,可以用,不知道你运行结果不对是什么意思

C99标准之前是不可以这么声明数组的,但是C99开始引入了变长数组这一概念,也就是使用变量定义数组各维,也就是你可以用 int a[x]; 这种方式定义数组,x的值无需是常量,但是有几个主要限制:
1:必须在函数内部声明或者是函数参数(也就是必须在存储在栈区),也不能是成员变量
2:不能在声明的同时初始化
3:不能是静态变量或用extern修饰
4:数组的类型以及长度的类型都必须支持sizeof(一般来说就是只能用内部类型)

大部分支持C99的编译器都支持这个特性(VC2005之后,GCC3.2之后),这个和new出来的数组还是本质上不一样的,这个其实是程序在运行期间在进程栈区生成定长数组,所以也不需要你手动释放,但这种做法对一些高级的调试方法可能有一定的影响

所以不建议新手这么使用,除非你的程序明确需要这个数组要存储在栈区同时又只能是变长数组(多半是为了性能)
xiaobomo
2014-05-30 · TA获得超过522个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:361万
展开全部
// 动态开辟二维数组
# include <iostream>
using namespace std;

int main()
{
int i,j;

//----------------------
int *a=new int;
// 赋值
*a=1;
// 释放内存
delete a;

//----------------------
int *b=new int[1];
// 赋值
for (i=0;i<1;i++)
{
b[i]=10+i;
}
// 释放内存
delete []b;

//----------------------
int **c=new int *[2];
for(i=0;i<2;i++)
{
c[i]=new int[3];
}
// 赋值
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
c[i][j]=i+j;
}
}
// 释放内存
for(j=0;j<2;j++)
{
delete []c[j];
}
delete c;

return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叛逆百分100
2014-05-30 · TA获得超过167个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:174万
展开全部
new数组不能在初始化时赋值,需要另外赋值
更多追问追答
追问
那么另外赋值的形式是什么呢?请给个例子,一维数组和二维数组的,谢谢!
追答
1维
同一个值 memset
有规律 for(int i = 0;i < size;i++){a[i] = ?;}
无规律 a[0] = ?;a[1] = ?;a[2] = ?;
2维
for(int i = 0;i < size1;i++)
{
for(int j = 0;j < size2;j++)
a[i][j] = ?;
}
。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式