c++动态定义数组长度
原程序运行时发现数组下标越界导致结果出错,现在需要两种动态数组1、从文件扫入n,定义数组长度为n+12、循环体内对A[n]赋值,通过一定的算法得到n(由于带if,所以事先...
原程序运行时发现数组下标越界导致结果出错,现在需要两种动态数组
1、从文件扫入n,定义数组长度为n+1
2、循环体内对A[n]赋值,通过一定的算法得到n(由于带if,所以事先不清楚n有多大),延伸数组长度到n,保证对A[n]赋值时不越界
当然第2种也可以先跑一遍循环得到n的最大值,再和第1种一样定义,不过为节省计算量,希望能随赋值增加数组长度(类似于表的append)
原程序大约300行,故分为10个函数,所有数组都要求在各函数间公用(可能这也是程序把数组静态定义在最前面的原因吧),C++好像不能在函数里定义全局变量,猜想可通过return实现
类和指针我没学过,如果有用到劳烦给点注释
编译器是VC++6,可能太落后,如果有用到更先进的也请告知 展开
1、从文件扫入n,定义数组长度为n+1
2、循环体内对A[n]赋值,通过一定的算法得到n(由于带if,所以事先不清楚n有多大),延伸数组长度到n,保证对A[n]赋值时不越界
当然第2种也可以先跑一遍循环得到n的最大值,再和第1种一样定义,不过为节省计算量,希望能随赋值增加数组长度(类似于表的append)
原程序大约300行,故分为10个函数,所有数组都要求在各函数间公用(可能这也是程序把数组静态定义在最前面的原因吧),C++好像不能在函数里定义全局变量,猜想可通过return实现
类和指针我没学过,如果有用到劳烦给点注释
编译器是VC++6,可能太落后,如果有用到更先进的也请告知 展开
1个回答
展开全部
你可以先定义一个全局指针变量(如果要求整型数组的话就是int* a,字符型就是char* a等),指针你可以把它理解成数组int a[],这里数组a就相当于int*a,但这时指针还没有分配内存空间,只要分配了就相当于数组,但比数组的优势在于可以动态定义长度,如果分配了空间之后a中存储的值就是分配的空间的位置 ,比如分配空间后a中值为2000,表明它指向2000这个位置,由于是全局变量,因此函数执行完,a也不会消失,因此一直都有a=2000(除非在函数中被重新分配了空间)
再分配内存区域,用new函数,比如整型指针,就用语句a=new int[n+1],就相当于此时已经定义了数组a[n+1],后面的操作可以就相当于有了a[n+1]该怎么用就怎么用
最后当你把数组使用完毕后,要释放掉内存空间,免得空间浪费,用delete释放掉内存空间,以后在想给a分配空间再用new分配就好了
再分配内存区域,用new函数,比如整型指针,就用语句a=new int[n+1],就相当于此时已经定义了数组a[n+1],后面的操作可以就相当于有了a[n+1]该怎么用就怎么用
最后当你把数组使用完毕后,要释放掉内存空间,免得空间浪费,用delete释放掉内存空间,以后在想给a分配空间再用new分配就好了
追问
解释很详细,多谢了
请问一下二维数组怎么定义,比如我需要A[3][n],其中3是给定的常数不会变,n是根据用户输入而定
另定义L[m][n],其中m和n都是通过用户输入计算得到的
还有第二种情况类似表的append,在STL里找到了一个vector,感觉很有用的样子,如果大神知道怎么玩的话还请点拨一二
追答
我直接说L[m][n]吧。首先定义一个指针变量int **a,然后分配空间a=new int*[m],此时表明给a分配了m个内存空间,你在看这个空间分配是int *,表明这m个内存空间都应该对应指针变量,但要注意此时只有a指向了一个内存区域,但这m个指针还未分配,因此还应用一个循环for(i=0;i,然后定义vectora,括号里面应该是数组你要存放的数据类型,如果你要定义一个字符型的数组a[10],就把int改为char就好了,此时用a.insert(pos,elem)表明在pos位置插入一个elem的数据,如果是a.insert(pos,n,elem)表明插入n个elem的拷贝,在使用这个容器的时候,不用声明数组长度,系统会根据实际情况进行调整,关于vector的相关函数有很多,你可以自己百度看看
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询