A. c语言中长度可变的数组
如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。
而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:
void func( int n ){int vla[2*n]; // 合法:存储周期为动态的static int e[n]; // 非法:长度可变数组不可有静态存储周期
struct S { int f[n]; }; // 非法:f不是一个普通标识符/* ... */}
B. 如何做出一个C++可变长数组,请各位帮忙
查看vector源码,照抄并简化一下!抄一下MFC的CArray也不错!只要一个指针和一个指示大小的整型就可以了,其他都是锦上添花而已
C++怎么又变成C了。
这么好像很复杂,其实很简单的。
1)需要一个T类型的指针,动态分配内存,需要一个整数记录数组大小
2)一个缺省构造函数
vector();// 无成员,或者任意常量个成员
和一个单参构造函数
vector(int n); //n 个成员
3)添加成员,需要动态改变分配的内存大小。
改变成员数量的函数:
void resize( int n);
添加成员的函数:
void push_back(const T&t);
4)查找指定成员,逐一查找;const int find(const T& t);
查找固定位置的成员----实现 constr T& operator[](int n)const;
5)索引方式访问 实现
下标运算符[] 重载,即
constr T& operator[](int n)const;和
T& operator[](int n);
6)同类型对象赋值,实现
复制构造函数
vector(vector &v);
和 赋值运算符重载
vector operator=(const vector &v
);
7)获取数组当前长度
int size()const ;
不是很复杂呀!
C. C语言怎样定义变长数组
”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊.....)
写全的话应该是
int x = 2; //x定义并赋值,当然不一定是2
char array[x];测试了一下,这样的代码在VC6.0下会报错,因为对C99新标准没有很好地实现。VS2005也不行。VS2013可以正确编译。gcc
3.2.2也可以正确编译。