标题:数组问题,求教
只看楼主
x6988312
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2012-3-26
结帖率:100%
已结贴  问题点数:10 回复次数:7 
数组问题,求教
void vector(int n)
{
    float vec[n]={0};
    cout<<vec[1]<<endl;
}
一个数组可不可以这样定义?其中void vector(int n)是自定义函数
搜索更多相关主题的帖子: void 
2012-12-07 20:02
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
自己试试就知道了啊

估计是不可以的

DO IT YOURSELF !
2012-12-07 20:04
wuxia111111
Rank: 2
等 级:论坛游民
帖 子:32
专家分:60
注 册:2012-11-18
得分:0 
不行啊!
#include<iostream>
using namespace std;

void vector(int n)
{
   
    float vec[n]={0}; //n必须为常量

    cout<<vec[1]<<endl;
}

int main()
{
   int m=5;
   vector(m);
   return 0;

        }
2012-12-07 23:39
StarFall
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:193
专家分:553
注 册:2012-10-1
得分:0 
试了。。不行。。

去追寻更高的技术领域。永不停止。
2012-12-08 06:39
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
你对局部变量理解不够深刻了
这个肯定不行的啦

局部变量的空间的大小在编译的时候就要知道的,float vec[n]={0}; 这样,n是变量,他的大小是不确定的,有参数传入,编译器不可能知道n是多少。无法开辟堆栈空间。

这样吧
#define  N 100
void vector()
 {
     float vec[N]={0};
     cout<<vec[1]<<endl;
 } // 样编译器知道开辟多少的空间

或者
#include<iostream>
 using namespace std;
 
void vector(int n)
 {
     
    float *vec = new float[n]; // 不用栈空间,用堆空间
    cout<<vec[1]<<endl; // 还没有赋值的哦,同时n = 1的时候就有内存违规了
    delete []vec;
 }



[ 本帖最后由 yuccn 于 2012-12-8 09:44 编辑 ]

我行我乐
我的博客:
http://blog.yuccn. net
2012-12-08 09:43
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
局部变量的空间,在编译的时候就要确定的了,其实就是调整寄存器esp而已, esp始终指向栈顶部,调整的时候也就是开辟了堆栈空间了,
比如 int i;
那么32位机器对应的汇编吗可能是 sub esp 4,4也就是i的空间大小。这个在编译时候就已经确定下来了
动态的空间 只能在堆中new 或者malloc出来了

我行我乐
我的博客:
http://blog.yuccn. net
2012-12-08 09:50
x6988312
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2012-3-26
得分:0 
回复 5楼 yuccn
使用new就可以创建任意大小的数组,如果不使用new或malloc是不是就不能创建任意大小的数组了?也就是说,一定要事先声明数组的大小后
才能创建???
2012-12-08 21:44
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:10 
回复 7楼 x6988312
“任意大的数组” 这个,只要大小确定的,都可以用局部变量,不过这个大小有限制,默认每个线程堆栈空间好像为1M,所以数组的大小(也就是局部变量的中大小)不能大于这个值

如果你不想用new申请堆的空间,可以用全局数组。

我行我乐
我的博客:
http://blog.yuccn. net
2012-12-08 22:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-390070-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.137447 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved