在这里,我们将讨论C ++中的可变长度数组。使用这个我们可以分配一个可变大小的自动数组。在C语言中,它支持C99标准的可变大小数组。以下格式支持此概念-
void make_arr(int n){ int array[n]; } int main(){ make_arr(10); }
但是,在C ++标准(直到C ++ 11)中,没有可变长度数组的概念。根据C ++ 11标准,数组大小被称为常量表达式。因此,以上代码块可能不是有效的C ++ 11或更低版本。在C ++ 14中,数组大小是一个简单的表达式(不是常量表达式)。
让我们看下面的实现以更好地理解-
#include<iostream> #include<cstring> #include<cstdlib> using namespace std; class employee { public: int id; int name_length; int struct_size; char emp_name[0]; }; employee *make_emp(struct employee *e, int id, char arr[]) { e = new employee(); e->id = id; e->name_length = strlen(arr); strcpy(e->emp_name, arr); e->struct_size=( sizeof(*e) + sizeof(char)*strlen(e->emp_name) ); return e; } void disp_emp(struct employee *e) { cout << "Emp ID:" << e->id << endl; cout << "Emp名称:" << e->emp_name << endl; cout << "名称长度:" << e->name_length << endl; cout << "Allocated:" << e->struct_size << endl; cout <<"---------------------------------------" << endl; } int main() { employee *e1, *e2; e1=make_emp(e1, 101, "Jayanta Das"); e2=make_emp(e2, 201, "Tushar Dey"); disp_emp(e1); disp_emp(e2); cout << "Size of student: " << sizeof(employee) << endl; cout << "Size of student pointer: " << sizeof(e1); }
输出结果
Emp ID:101 Emp名称:Jayanta Das 名称长度:11 Allocated:23 --------------------------------------- Emp ID:201 Emp名称:Tushar Dey 名称长度:10 Allocated:22 --------------------------------------- Size of student: 12 Size of student pointer: 8