社区
C++ 语言
帖子详情
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
打赏
收藏
c++中,2个问题
c++中, void f(int m) { const int N=m; int t[N]; ... } 这样为何不行,如果想根据参数来定义数组,咋弄? 另外 int *t=new int[5]; 有没有办法不用循环就让t[]每个元素为0? memset()..好像不行。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 必须是个常量
Jinja2Cpp 项目常见
问题
解决方案
Jinja2Cpp是
C++
实现的Jinja2模板引擎,适用于需动态生成HTML或源代码的
C++
项目。新手使用时可能遇到编译构建、模板加载渲染、多字符集支持等
问题
,可通过检查依赖库、调试模板、设置字符集等步骤解决。
Matlab2cpp 项目常见
问题
解决方案
Matlab2cpp 是将 Matlab 代码转换为
C++
代码的开源项目,用 Python 构建转换工具。本文针对新手常见
问题
给出解决步骤,包括如何安装 Matlab2cpp、如何使用其转换代码,以及转换后
C++
代码编译失败的解决办法,如检查语法、确保编译器支持
C++
11 等。
Keras2cpp 常见
问题
解决方案
本文介绍 Keras2cpp 项目,它是用于在原生
C++
应用运行 Keras 2 模型的小型库,不依赖外部库,用 CPU 计算。还针对新手常见
问题
给出解决步骤,包括项目环境安装配置、在
C++
应用加载运行模型、在 Python 导出 Keras 模型为可用格式。
keras2cpp项目常见
问题
解决方案
本文介绍了keras2cpp项目在使用过程
中
常见的三类
问题
及其解决方案,包括模型导出失败、
C++
编译错误以及模型预测结果不一致。重点强调了模型文件完整性、编译器兼容性及输入数据格式一致性等关键点,帮助开发者顺利将Keras模型转换为纯
C++
代码。
Cpp2IL项目
中
StrippedCodeRegSupport插件异常
问题
解析
本文围绕Cpp2IL项目
中
StrippedCodeRegSupport插件异常
问题
展开。该
问题
表现为插件加载失败,抛出相关异常。原因包括运行时环境不匹配、版本兼容性
问题
和线程安全
问题
。解决方案有确认运行环境、升级版本或暂时禁用插件,还给出了插件系统设计的技术启示。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章