C和C ++中的可变长度数组

在这里,我们将讨论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