c++中,2个问题

booming 2009-04-14 08:11:40
c++中,
void f(int m)
{
const int N=m;
int t[N];
...
}

这样为何不行,如果想根据参数来定义数组,咋弄?


另外
int *t=new int[5];

有没有办法不用循环就让t[]每个元素为0?
memset()..好像不行。
...全文
164 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxgiter 2009-04-15
  • 打赏
  • 举报
回复
c++中,
void f(int m)
{
const int N=m;
int t[N];
...
}

这样为何不行,如果想根据参数来定义数组,咋弄?
---------------------------------------------------------

gcc支持,不过不是c++标准,用vector吧。。
aaaa3105563 2009-04-15
  • 打赏
  • 举报
回复
学习······
bitsjx 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 nicky_zs 的回复:]
哦,不好意思看错了。。。 你的程序在微软的编译器下是无法通过编译的。。。
因为你的N虽然是const int,但是它的值仍然无法在编译期确定下来,所以微软的编译器不允许这种代码。。。
不过在GCC下还是可以的。
[/Quote]

顶,以前我也是犯这种问题。
结果自己还找不到问题所在。
nicky_zs 2009-04-14
  • 打赏
  • 举报
回复
哦,不好意思看错了。。。 你的程序在微软的编译器下是无法通过编译的。。。
因为你的N虽然是const int,但是它的值仍然无法在编译期确定下来,所以微软的编译器不允许这种代码。。。
不过在GCC下还是可以的。
nicky_zs 2009-04-14
  • 打赏
  • 举报
回复
第一个问题:
一般的编译器应该允许你这样做。我在VS2008中试过,像这样的代码:

const int n = 4;
int a[n];

是可以通过编译正常运行的。

值得一提的是,在GCC(我的版本是mingw 3.4.5)中,甚至连这样的代码也都是可以的:

int n;
cin >> n;
int a[n];


第二个问题:
int *p = new int[5]();
加上最后面那一对小括号就可以保证p[0]到p[4]全部都等于0了。
walterCui 2009-04-14
  • 打赏
  • 举报
回复
int t[N];
这条语句是相内存的栈区申请一块内存,而栈区不是来动态分配内存的。是程序在编译的时候,就必须为变量分配好固定大小的内存块。而你用N这显然是不对的。因为N值是在程序运行时确定的。
wxc0077 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 booming 的帖子:]
c++中,
void f(int m)
{
const int N=m;
int t[N];
...
}

这样为何不行,如果想根据参数来定义数组,咋弄?


另外
int *t=new int[5];

有没有办法不用循环就让t[]每个元素为0?
memset()..好像不行。
[/Quote]

这个0是数字0吧,不是ASCII码的0吧?
for(int i=0;i<5;i++)
{
*(t+i)=0;
}
这样就好了
li_il 2009-04-14
  • 打赏
  • 举报
回复
哦,不好意思,把main函数里面的
Foo<9>();
改成
Foo<10>();

na2650945 2009-04-14
  • 打赏
  • 举报
回复
C++不支持变长数组。
建议用VECTOR.
第二个等待高手。
li_il 2009-04-14
  • 打赏
  • 举报
回复
template<size_t N>
void Foo()
{
int a[N];
a[0] = 0;
a[9] = 9;
}

int _tmain(int argc, _TCHAR* argv[])
{

Foo<9>();

return 0;
}


just try this。
lq651659889 2009-04-14
  • 打赏
  • 举报
回复
学习下进来
melonsmile 2009-04-14
  • 打赏
  • 举报
回复
楼主的方法必须在编译时能确定数组的大小,但你的方法不行;

可以:
const int N=128;
int t[N];

或者:
int *t = new int[m];
机智的呆呆 2009-04-14
  • 打赏
  • 举报
回复
1 用vector
2
int *p=new int[10];
memset(p,0,sizeof(int)*10);

scott_2009 2009-04-14
  • 打赏
  • 举报
回复
既然要定义数组,那么在编译期就要确定数组的大小,用来给数组分配空间。
N的值是在运行期确定的,所以编译器无法为数组分配空间。

pytf 2009-04-14
  • 打赏
  • 举报
回复
memset()你可能用的不对吧
int *t=new int[5];
memset(t,0,sizeof(int)*5);
pytf 2009-04-14
  • 打赏
  • 举报
回复
数组在创建的时间n 必须是个常量

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧